具有多种值类型的 Java 枚举
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19600684/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java enum with multiple value types
提问by Paul Nelson Baker
Basically what I've done is write an enum for States, and I want to not only be able to access them just as states but also access their abbreviation and whether or not they were an original colony.
基本上我所做的是为州写一个枚举,我不仅希望能够像州一样访问它们,还希望能够访问它们的缩写以及它们是否是原始殖民地。
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];
}
}
This seems to work as I'd expect it to. I can
这似乎像我期望的那样工作。我可以
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"
For this particular scenario involving enums, is this the best way to do this or is there a better way to setup and format this enum? Thanks to all in advance!
对于这个涉及枚举的特定场景,这是最好的方法还是有更好的方法来设置和格式化这个枚举?提前感谢大家!
采纳答案by tbodt
First, the enum methods shouldn't be in all caps. They are methods just like other methods, with the same naming convention.
首先,枚举方法不应全部大写。它们是与其他方法一样的方法,具有相同的命名约定。
Second, what you are doing is not the best possible way to set up your enum. Instead of using an array of values for the values, you should use separate variables for each value. You can then implement the constructor like you would any other class.
其次,您正在做的不是设置枚举的最佳方式。您应该为每个值使用单独的变量,而不是使用一组值作为值。然后,您可以像执行任何其他类一样实现构造函数。
Here's how you should do it with all the suggestions above:
以下是您应该如何使用上述所有建议进行操作:
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;
}
}