具有多种值类型的 Java 枚举

2024-06-01

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

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;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多种值类型的 Java 枚举 的相关文章

随机推荐