州としてアクセスできるだけでなく、略称や植民地であったかどうかにもアクセスできるようにしたいのです。
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"
列挙型を含むこの特定のシナリオでは、これが最善の方法なのでしょうか、それともこの列挙型をセットアップしてフォーマットするもっと良い方法があるのでしょうか?前もって皆さんに感謝します!
まず、enumメソッドは全角で書くべきではありません。これらは他のメソッドと同じようにメソッドであり、同じ命名規則があります。
第二に、あなたがやっていることは、enumをセットアップする最良の方法ではありません。値に値の配列を使うのではなく、それぞれの値に個別の変数を使うべきです。そうすれば、他のクラスと同じようにコンストラクタを実装できます。
以下は、上記のすべての提案に従った方法です:
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;
}
}