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);
Adarshr
fuente
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");
Xion
fuente
8

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

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

AlexR
fuente
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.

anon58192932
fuente