当前位置: 首页 > 面试题库 >

具有多个值类型的Java枚举

时经纬
2023-03-14
问题内容

基本上,我所做的是为州写一个枚举,我不仅希望能够像州一样访问它们,而且还希望访问它们的缩写以及它们是否是原始殖民地。

public enum States {
        ...
        MASSACHUSETTS("Massachusetts",  "MA",   true),
        MICHIGAN("Michigan",            "MI",   false),
            ...; //so on and so forth for all fifty states

        private final Object[] values;

        States(Object... vals) {
            values = vals;
        }

        public String FULL() {
            return (String) values[0];
        }

        public String ABBR() {
            return (String) values[1];
        }

        public boolean ORIGINAL_COLONY(){
            return (boolean) values[2];
        }
    }

这似乎按我预期的那样工作。我可以

System.out.println(States.ALABAMA);                  // Prints "ALABAMA"
System.out.println(States.ALABAMA.FULL());           // Prints "Alabama"
System.out.println(States.ALABAMA.ABBR());           // Prints "AL"
System.out.println(States.ALABAMA.ORIGINAL_COLONY());// Prints "false"

对于涉及枚举的特定情况,这是执行此操作的最佳方法,还是设置和格式化此枚举的更好方法?预先感谢所有人!


问题答案:

首先,枚举方法不应大写。它们是与其他方法一样的方法,具有相同的命名约定。

其次,您所做的并不是建立枚举的最佳方法。不要为每个值使用值的数组,而应为每个值使用单独的变量。然后,您可以像其他任何类一样实现构造函数。

以下是所有上述建议的处理方式:

public enum States {
    ...
    MASSACHUSETTS("Massachusetts",  "MA",   true),
    MICHIGAN     ("Michigan",       "MI",   false),
    ...; // all 50 of those

    private final String full;
    private final String abbr;
    private final boolean originalColony;

    private States(String full, String abbr, boolean originalColony) {
        this.full = full;
        this.abbr = abbr;
        this.originalColony = originalColony;
    }

    public String getFullName() {
        return full;
    }

    public String getAbbreviatedName() {
        return abbr;
    }

    public boolean isOriginalColony(){
        return originalColony;
    }
}


 类似资料:
  • 枚举类(“新的枚举”/“强类型的枚举”)主要用来解决传统的C++枚举的三个问题: 传统C++枚举会被隐式转换为int,这在那些不应被转换为int的情况下可能导致错误 传统C++枚举的每一枚举值在其作用域范围内都是可见的,容易导致名称冲突(同名冲突) 不可以指定枚举的底层数据类型,这可能会导致代码不容易理解、兼容性问题以及不可以进行前向声明 枚举类(enum)(“强类型枚举”)是强类型的,并且具有类

  • 问题内容: 我必须完成一个奇怪的特殊情况。其描述如下: 我必须设计一个地图,其中“ 键 ”始终为 字符串 类型。但是,其中一个键的“ 值 ”可以是 字符串或列表 (取决于特定键可以具有的值数。如果该特定键只有一个值,并且必须如果键包含许多值,则为列表)。如何完成这种情况? 例如:在映射中有2个键,分别是“名称”和“电话号码”。一个人只能有一个名字和多个电话号码。因此,此处的第一个键(即“名称”)的

  • 问题内容: 什么是C#的Java等价物: 问题答案: 如果需要属性,则需要这样定义: 您可以这样使用它: 要意识到的是,这只是创建类的捷径,因此您可以向该类添加所需的任何属性和方法。 如果您不想在自己的方法上定义任何方法,则可以更改成员变量的范围并进行设置,但这不是它们在Sun网站上的示例中所做的。

  • 问题内容: 我想拥有一个Class对象,但是我想强迫它代表的任何类扩展A类并实现接口B。 我可以: 要么: 但我不能两者都做。有没有办法做到这一点? 问题答案: 实际上,你可以做你想做的事。如果要提供多个接口或一个类加接口,则必须使通配符看起来像这样: 请参见sun.com上的泛型教程,特别是页面底部的“ 绑定类型参数”部分。实际上,如果需要,你可以列出多个接口,并& InterfaceName根

  • 我正在使用SpringBoot和JPA。 在我的实体中,我有一个映射为枚举的状态字段。我想将e特定枚举值映射为null。