2010-03-08 2 views
9

이처럼 열거 형을 정의했습니다.키 값 쌍으로 열거 형을 얻는 가장 쉬운 방법

public enum UserType { 

    RESELLER("Reseller"), 

    SERVICE_MANAGER("Manager"), 

    HOST("Host"); 

    private String name; 

    private UserType(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

} 

것은 어떤 키 - 값 쌍은 열거 값을 형성 얻을 수있는 가장 쉬운 방법이어야 하는가?

내가이

key = Enum(example:- HOST) 
value = Host 

내가 정의합니까 원하는지도 같아야 만들려면 출력지도

Map<String, String> constansts = new HashMap<String, String>(); 

및 ANS입니다 : 내가

나요 나는 일반 만든 무엇 enum에 액세스하여 그 값을 Map으로 변경하는 메서드입니다. 나는이 IDEA 코드를 가지고 다른 스레드에서 코드 조각을 발견했다. 내가 할 일은이 모든 모든 열거 구조와이 메소드를 호출하고 난 완료하고 후 지금

public static <T extends Enum<T>> Map<String, String> getConstantMap(
     Class<T> klass) { 

    Map<String, String> vals = new HashMap<String, String>(0); 

    try { 
     Method m = klass.getMethod("values", null); 
     Object obj = m.invoke(null, null); 

     for (Enum<T> enumval : (Enum<T>[]) obj) { 
      vals.put(enumval.name(), enumval.toString()); 
     } 

    } catch (Exception ex) { 
     // shouldn't happen... 
    } 

    return vals; 
} 

.

이 완료하려면 더 많은 것은 나는이

public String toString() { 
     return name; 
    } 

감사와 같은 ToString 메서드를 orverride해야합니다.

+0

을 사용하고 있다고 생각 당신이 열거 나 키를 될 수있는 문자열을 하시겠습니까? – Carl

+0

대신에'klass.getEnumConstants()'할 수 있습니다. – user102008

답변

17

가 제공 당신은 열거 인스턴스에 텍스트 값에서 매핑해야합니다

Map<String, UserType> map = new HashMap<String, UserType>(); 
map.put(RESELLER.getName(), RESELLER); 
map.put(SERVICE_MANAGER.getName(), SERVICE_MANAGER); 
map.put(HOST.getName(), HOST); 

또는 더 일반적인 접근 방식 :

for (UserType userType : UserType.values()) { 
    map.put(userType.getName(), userType); 
} 
+2

참으로 아주 힘든 방법입니다. 상자 밖의 물건이 없습니까? 뭔가 있어야합니다 ........ –

+0

@ vijay.shad 내 업데이 트를 참조하십시오. 당신이 당신의 질문에 더 많은 세부 사항을 주면 당신은 당신이 찾고있는 것을 정확히 얻을 수있는 가능성을 높일 수 있습니다 :-) –

+0

자바가 당신에게 더 쉬운 방법을 제공하지 않습니다 ... 죄송합니다 – malaverdiere

11

당신은 열거의 값() 메소드를 사용할 수 있습니다, 가능한 모든 조합을 제공하고 반복자를 사용하여 맵에 배치합니다.

Map<String, UserType> map = new HashMap<String, UserType>(); 
for (UserType userType : UserType.values()) { 
    map.put(userType.name(), userType); 
} 
관련 문제