Convertir cadena en valor de enumeración equivalente


Respuestas:


220

Espero que se dé cuenta, java.util.Enumerationes diferente de los tipos Java 1.5 Enum .

Simplemente puede usar YourEnum.valueOf("String")para obtener el tipo de enumeración equivalente.

Por lo tanto, si su enumeración se define así:

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY
}

Podrías hacer esto:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);


18

Suponiendo que usa enumeraciones de Java 5 (lo cual no es tan seguro ya que menciona la Enumerationclase anterior), puede usar el valueOfmétodo de java.lang.Enumsubclase:

MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");

8

Utilice el método estático valueOf(String)definido para cada uno enum.

Por ejemplo, si tienes enum MyEnum, puedes decirMyEnum.valueOf("foo")


4

Podría haber diseñado demasiado mi propia solución sin darme cuenta de que Type.valueOf("enum string")realmente existía.

Supongo que brinda un control más granular, pero no estoy seguro de que sea realmente necesario.

public enum Type {
    DEBIT,
    CREDIT;

    public static Map<String, Type> typeMapping = Maps.newHashMap();
    static {
        typeMapping.put(DEBIT.name(), DEBIT);
        typeMapping.put(CREDIT.name(), CREDIT);
    }

    public static Type getType(String typeName) {
        if (typeMapping.get(typeName) == null) {
            throw new RuntimeException(String.format("There is no Type mapping with name (%s)"));
        }
        return typeMapping.get(typeName);
    }
}

Creo que se está intercambiando IllegalArgumentExceptionpor RuntimeException(o lo que sea la excepción que desea tirar) que podrían potencialmente limpia código de arriba.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.