66

基本的に私が行ったことは、状態の列挙型を作成することです。状態としてアクセスできるだけでなく、その略語と元のコロニーであったかどうかにもアクセスできるようにしたいと考えています。

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"

列挙型を含むこの特定のシナリオでは、これがこれを行うための最良の方法ですか、それともこの列挙型をセットアップしてフォーマットするためのより良い方法はありますか? 事前にすべてに感謝します!

4

1 に答える 1

153

まず、列挙型メソッドはすべて大文字であってはなりません。これらは、同じ命名規則を持つ他のメソッドと同様のメソッドです。

第二に、あなたがしていることは、列挙型を設定するための最良の方法ではありません。値に値の配列を使用する代わりに、値ごとに個別の変数を使用する必要があります。その後、他のクラスと同じようにコンストラクターを実装できます。

上記のすべての提案でそれを行う方法は次のとおりです。

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;
    }
}
于 2013-10-25T23:10:39.580 に答える