3

州にアクセスできる Country 列挙型を実行したいのですが、どうすればよいですか?

このようなもの:

public enum SomeEnum {

     ARGENTINA {
       BUENOS_AIRES;
     }

     UNITED_STATES {
       CALIFORNIA, FLORIDA, NEW_YORK, ALASKA;
     }

}

SomeEnum state1 = SomeEnum.ARGENTINA.BUENOS_AIRES
SomeEnum state2 = SomeEnum.UNITED_STATES.CALIFORNIA;
4

4 に答える 4

3

ネストされた列挙型をその親に割り当てることはできません

SomeEnum state1 = SomeEnum.ARGENTINA.BUENOS_AIRES

あなたができることは

class Test {
    SomeEnum someEnum = SomeEnum.SRILANKA;
    SomeEnum.UNITED_STATES us = SomeEnum.UNITED_STATES.CALIFORNIA;
    SomeEnum.ARGENTINA argentina = SomeEnum.ARGENTINA.BUENOS_AIRES;
}

enum SomeEnum {
    SRILANKA;

    enum ARGENTINA {
        BUENOS_AIRES;
    }

    enum UNITED_STATES {
        CALIFORNIA, FLORIDA, NEW_YORK, ALASKA;
    }
}

ここでは、型にUNITED_STATESandを割り当てることはできませんARGENTINASomeEnum

于 2016-10-05T05:55:12.137 に答える
1

これを達成するための別のアプローチを探すことをお勧めします。国の州を「ネスト」する方法を考えることができる場合、すべての州に対して単一のタイプを持たないという問題が発生します。state米国の州またはアルゼンチンの州を割り当てることができる変数を持つことはできません。

検討できる代替モデルを次に示します。

public interface State {
}

private enum UnitedStates implements State {
    CALIFORNIA, ...;
}

private enum ArgentinaStates implements State {
    BUENOS_AIRES, ...;
}

public enum Country {
        SRILANKA(),
        US(UnitedStates.values()),
        ARGENTINA(ArgentinaStates.values());

    Country(State... states) {
        this.states = Arrays.toList(states);
    }

    private final List<State> states;

    public List<State> getStates() {
        return states;
    }
}

次に、次のことができます。

State state;
state = ArgentinaStates.BUENOS_AIRES;
state = UnitedStates.CALIFORNIA;
于 2016-10-05T06:46:58.810 に答える