基本上我所做的就是为国家写一个枚举,我希望不仅能够像州一样访问它们,而且还能访问它们的缩写以及它们是否是原始殖民地。
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"
对于这个涉及枚举的特定场景,这是最好的方法吗?还是有更好的方法来设置和格式化这个枚举?提前全部感谢!
答案 0 :(得分:100)
首先,枚举方法不应全部大写。它们就像其他方法一样,具有相同的命名约定。
其次,你正在做的不是设置你的枚举的最好方法。您应该为每个值使用单独的变量,而不是为值使用值数组。然后,您可以像执行任何其他类一样实现构造函数。
以下是您应该如何处理上述所有建议:
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;
}
}