2016-12-29 1 views
0

특정 유형을 함께 유지하는 열거 형과 각 유형의 특정 필드가 있습니다.반복되는 값이있는 열거 형?

public enum Types { 

A (1, A.class, "stringA"), 
B (2, B.class, "stringB"), 
C (3, C.class, "stringC"), 

C1(3, C1.class, "stringC"), 
C2(3, C2.class, "stringC"), 
C3(3, C3.class, "stringC"), 
. 
. 
D (4, D.class, "stringD"), 
E (5, E.class, "stringE"), 
F (6, F.class, "stringF"), 
. 
. 
. 
. 
private int type; 
private Class<?> className; 
private String longname; 

private Types(int type, Class<?> className, String longName) 
    { 
     this.type = type; 
     this.className = className; 
     this.longName = longName; 
    } 

//..... getter, setters 
// returns name from type passed 
    public static Types getName(int type) { 

     for (Types e : Types.values()) { 
      if (type == e.type) 
       return e; 
     } 

     return null; 
    } 
} 

이제 모든 유형의 중복 키가 없어 질 때까지 모든 것이 올바르게되었습니다. 따라서 TypeC에는 C1, C2.. 하위 유형이 있으므로 3과 동일한 유형 값을 갖습니다.

이것은 열거 형의 values을 반복하여 유형을 제공하는 방법 getName()입니다.

이제 C1, C2, C3... 이제 동일한 유형의 값 3

모든지도가 C 유형을 구분하기 위해, 나는 단지 C 아형에 대한 또 다른 변수 이름 definition 있습니다. 그래서 definition의 값은 다음과 같습니다

C1 100 
C2 101 
C3 101 

그래서 C 형의 열거의 고유 한 요소를 검색하기 위해, 나는 두 개의 값 typedefinition 모두 필요합니다.

내가 생각 두 가지 방법 :

중 하나가 definition라는 이름의 전체 열거를위한 새로운 필드를 추가하기 때문에이

C.

을 제외한 다른 유형의 null 값으로 이어질 것 또는 새로운 열거를 만들 C 하위 유형의 경우 해당 열거 형을 사용하여 getName() 대신 C 하위 유형 이름을 가져옵니다.

가능한 한 최상의 방법으로 이것을 달성하는 방법은 무엇입니까?

도움을 주시면 감사하겠습니다.

+0

유형 필드를 정의 필드로 바꾸고 A1, A2, G7, Z9를 갖고 싶어 할 수 있으므로 A에 100, B에 200 등을 넣으라고 제안합니다. 널리 사용되는 라이브러리를 업그레이드하지 않는 한 유형을 정의로 완전히 대체하는 것이 항상 더 좋습니다. – glee8e

+0

'Types getName (int type)'메서드의 이름을 바꿀 것을 제안합니다. 메소드가 할 수있는 것을 이해할 수 있도록 javadoc을 추가해 주시겠습니까? 'Types getByTypeKey (int typeKey)'와 같은가요? –

+0

@TobiasOtto : 예, 그것은'getByTypeKey (int typeKey)'입니다. 1 -> A 타입, 2 -> B 타입, 3 -> C 타입 –

답변

0

귀하의 Cx 열거 형이 실제로 A, B 등과 같은 클래스인지 여부에 따라 달라집니다. 그리고 도메인 모델을 모른 채 대답 할 수 없습니다.

그냥 구문에서, 나는 아마 Typesdefinitiontype 필드, definition 기본 키 존재를 개최 할 것입니다. 그런 다음 두 개의 생성자 (definitiontype 모두 포함)와 다른 하나는 definition (typedefinition과 동일한 값으로 지정됨)으로 구성됩니다. 이것은 기본적으로 두 필드로 제안한 것이지만 null 대신 Cx을 입력하면 definitiontype과 같다고 간주합니다.

+0

A, B, C, D는 서로 다른 타입이고 C1, C2 ..는 C 타입입니다. 'Cx' 타입이므로, type에는 정의와 같은 값을 할당 할 수 없습니다. 두 생성자가 어떻게 작동하는지 예를 들려 줄 수 있습니까? –

관련 문제