2016-10-05 13 views
2

나는 해당 국가에 액세스 할 수있는 국가 열거 형을 원한다. 어떻게 할 수 있습니까? 이 같은Java에 중첩 enums 같은 것이 있습니까?

뭔가 :

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_STATES 및을 할당 할 수 없습니다. 0에서 유형 SomeEnum

+0

요구 사항에 따라 디자인을 상세히 적용 할 수 있습니다. 예를 들어 어떤 나라의 상태를 변수'myState'에 할당하기를 원할 경우 마커'인터페이스 상태 {}'를 선언하고 내부 enum이 그것을 구현하도록 할 수 있습니다 ('enum ARGENTINA가 State를 구현합니다 ... '). 그래서'State myState = SomeEnum.ARGENTINA.BUENOS_AIRES; '가 작동합니다. –

+1

그들은 모두 동일한 'interface country' –

0

@ Thhusitha 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

예 !! 자유 LOL !!! –

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;