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