2016-10-05 92 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;