2011-03-02 9 views
6

또 다른 열거 형과 자체 값을 포함하는 열거 형 클래스를 정의하고 싶습니다. 예를 들어 :다른 열거 형을 참조하는 Java 열거 형

public enum A { 
    A1, A2, A3; 
} 

public enum B{ 
    B1, B2, ...(somehow define references to all values in enum A) 
} 

이러한 열거 B에 포함 된 값 중 initself (예 B1, B2) 또는 열거 A. 임의의 값을 정의해야

감사

+1

왜 열거 형을 확장해야합니까? – Woot4Moo

답변

5

하도록 BAB의 합집합입니까? B이 (가) A으로 확장되지 않으면이 형식을 사용할 수 없습니다.이 형식은 java에서 not supported입니다. 진행하는 방법은, 이와 같은

enum C { 
    A1, A2, A3, B1, B2; 
} 
+0

(그게'A'''B''를 연장합니다.) –

1

뭔가 예컨대 AB의 조합 된 값을 포함하는 enum을 만드는 것이다?

enum A { 
    A1, A2; 
} 

enum B { 
    B1(null), 
    B2(null), 
    A1(A.A1), 
    A2(A.A2); 

    private final A aRef; 
    private final B(A aRef) { 
     this.aRef = aRef; 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 내가 생각한 것을 쉽게 할 수있는 방법이없는 것처럼 보입니다. 나는 대신 이러한 기능을 에뮬레이트하기 위해 계획 자바 클래스를 사용하기로했다. – MikeMY

1

가장 가까운 사용자는 A와 B에 일부 공유 인터페이스를 구현하는 것입니다.

enum A implements MyEnum{A1,A2} 
enum B implements MyEnum{B1,B2} 

MyEnum e = B.B1; 

이 해결 방법은 switch 문이나 최적화 된 enum 모음과는 작동하지 않습니다.

사용 사례가 자바 enum 구현에서 지원되지 않습니다. 구현이 복잡하거나 (유용성과 비교하여) 또는 올라오지 않았습니다 (직접 지원하는 몇 가지 언어가 없습니다) .

2

일반적으로 Java에서 작업 중이므로 일반적으로 OO 디자인을 금지하므로 확장을 통해이 기능을 사용할 수 있습니다. 그러나 열거 형은 java.lang.Enum을 암시 적으로 확장하므로 은 다른 클래스를 확장 할 수 없습니다.

이것은 다른 소스에서 가장 많이 파생 된 열거 형에 대한 확장 성을 의미합니다.

Joshua Bloch는 항목 34에 Effective Java : Second Edition에 enums에 대한 공유 인터페이스 패턴을 표시 할 때이를 추가합니다. 다음은 패턴의 예입니다.

이것은 열거 형과 관련하여 거의 공유 상태에 가깝습니다. Johan Sjöberg가 위에서 말했듯이 열거 형을 다른 열거 형으로 단순히 결합하는 것이 가장 쉽습니다.

행운을 빈다.