Converter String em valor Enum equivalente


Respostas:


220

Espero que você perceba, java.util.Enumerationé diferente dos tipos de Enum do Java 1.5 .

Você pode simplesmente usar YourEnum.valueOf("String")para obter o tipo de enum equivalente.

Assim, se seu enum for definido como:

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

Você poderia fazer isso:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);


18

Supondo que você use enums Java 5 (o que não é tão certo, já que você mencionou a Enumerationclasse antiga ), você pode usar o valueOfmétodo da java.lang.Enumsubclasse:

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

8

Use o método estático valueOf(String)definido para cada um enum.

Por exemplo, se você tem, enum MyEnumpode dizerMyEnum.valueOf("foo")


4

Eu posso ter super-projetado minha própria solução sem perceber que ela Type.valueOf("enum string")realmente existia.

Acho que dá um controle mais granular, mas não tenho certeza se é realmente necessário.

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

Eu acho que você está trocando IllegalArgumentExceptionpor RuntimeException(ou qualquer exceção que você deseja lançar) que poderia potencialmente limpar o código.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.