특정 유형을 함께 유지하는 열거 형과 각 유형의 특정 필드가 있습니다.반복되는 값이있는 열거 형?
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 형의 열거의 고유 한 요소를 검색하기 위해, 나는 두 개의 값
type
및
definition
모두 필요합니다.
내가 생각 두 가지 방법 :
이중 하나가 definition
라는 이름의 전체 열거를위한 새로운 필드를 추가하기 때문에이
C.
을 제외한 다른 유형의 null 값으로 이어질 것 또는 새로운 열거를 만들 C 하위 유형의 경우 해당 열거 형을 사용하여getName()
대신 C 하위 유형 이름을 가져옵니다.
가능한 한 최상의 방법으로 이것을 달성하는 방법은 무엇입니까?
도움을 주시면 감사하겠습니다.
유형 필드를 정의 필드로 바꾸고 A1, A2, G7, Z9를 갖고 싶어 할 수 있으므로 A에 100, B에 200 등을 넣으라고 제안합니다. 널리 사용되는 라이브러리를 업그레이드하지 않는 한 유형을 정의로 완전히 대체하는 것이 항상 더 좋습니다. – glee8e
'Types getName (int type)'메서드의 이름을 바꿀 것을 제안합니다. 메소드가 할 수있는 것을 이해할 수 있도록 javadoc을 추가해 주시겠습니까? 'Types getByTypeKey (int typeKey)'와 같은가요? –
@TobiasOtto : 예, 그것은'getByTypeKey (int typeKey)'입니다. 1 -> A 타입, 2 -> B 타입, 3 -> C 타입 –