2010-03-08 21 views
9

He definido mis enumeraciones de esta manera.La forma más fácil de obtener Enum en el par de valores clave

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; 
    } 

} 

¿Cuál debería ser la forma más fácil de obtener una pareja clave-valor de los valores enum?

El mapa de salida Quiero crear debe ser así

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

El mapa Quiero do definir es

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

Respuesta: Lo que hice

He creado un genérico Método para acceder a cualquier enumeración y cambiar los valores de eso a un Mapa. Obtuve esta IDEA, formé un fragmento de código que se encuentra aquí en cualquier otro hilo.

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; 
} 

Ahora, después de esto todo lo que tengo que hacer es llamar a este método con todas las construcciones de enumeración y he terminado.

una cosa más

para hacer esto tengo que orverride el método toString como esto

public String toString() { 
     return name; 
    } 

Gracias.

+0

¿Quieres que la enumeración o la cadena a ser la clave? – Carl

+0

en lugar de todo eso de reflexión, puedes hacer 'klass.getEnumConstants()' – user102008

Respuesta

17

con tal que usted necesita para trazar a partir de los valores textuales a las instancias de enumeración:

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); 

o un enfoque más genérico:

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

Esta es la forma más DIFÍCIL de hecho. ¿No existe nada fuera de la caja? Debe haber algo ........ –

+0

@ vijay.shad ver mi actualización. Si proporciona más detalles en su pregunta, aumenta las posibilidades de obtener exactamente lo que está buscando :-) –

+0

No hay forma más fácil que le haya dado Java ... lo siento – malaverdiere

11

Usted puede utilizar el método() los valores de la enumeración, ofreciéndole todas las combinaciones posibles, y poner eso en un mapa usando el iterador.

Map<String, UserType> map = new HashMap<String, UserType>(); 
for (UserType userType : UserType.values()) { 
    map.put(userType.name(), userType); 
} 
Cuestiones relacionadas