2016-10-05 60 views
2

我想做一个国家枚举,我可以访问它的状态,我该怎么做?有没有像Java中的嵌套枚举?

事情是这样的:一个嵌套枚举

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; 
+2

你到底想要做什么_? –

回答

2

你可以使用一个界面像

interface Country { 
    Country USA = Americas.USA; 

    enum Asia implements Country { 
     Indian, 
     China, 
     SriLanka 
    } 
    enum Americas implements Country { 
     USA, 
     Brazil 
    } 
    enum Europe implements Country { 
     UK, 
     Ireland, 
     France 
    } 
} 

,你可以有

Country c = Country.USA; 
c = Country.Asia.China; 
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_STATESARGENTINA到一种类型SomeEnum

+0

根据要求,可以详细阐述设计。例如,如果您希望能够将任何国家的状态分配给变量'myState',则可以声明标记'interface State {}'并让内部枚举实现它(enum ARGENTINA implements State ...') ,所以'国家myState = SomeEnum.ARGENTINA.BUENOS_AIRES;'将工作。 –

+1

他们都可以实现相同的'接口国家' –

0

@Thusitha Thilina Dayaratne的例子非常完美!但是,如果你仍然想使用同一时间像你提到的:

SomeEnum状态1 = SomeEnum.ARGENTINA.BUENOS_AIRES SomeEnum状态2 = SomeEnum.UNITED_STATES.CALIFORNIA;

然后就这样做:

Object state1, state2, state3; 

    state1 = SomeEnum.UNITED_STATES.CALIFORNIA; 
    state2 = SomeEnum.ARGENTINA.BUENOS_AIRES; 
    state3 = SomeEnum.SRILANKA; 

    System.out.println(state1); 
    System.out.println(state2); 
    System.out.println(state3); 

,你会得到正是你想要的东西!

+1

“你究竟想要什么” - 除了类型安全:-) –

+0

是的!自由大声笑! –

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;