Convertir la chaîne en valeur Enum équivalente


99

Est-il possible pour moi de convertir a Stringen une valeur équivalente dans un Enumeration, en utilisant Java.

Je peux bien sûr le faire avec une grande if-elsedéclaration, mais je voudrais éviter cela si possible.

Compte tenu de cette documentation:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html

Je n'ai pas trop bon espoir que cela soit possible sans si ni déclaration de cas.

Réponses:


220

J'espère que vous vous rendez compte, java.util.Enumerationest différent des types Java 1.5 Enum .

Vous pouvez simplement utiliser YourEnum.valueOf("String") pour obtenir le type enum équivalent.

Ainsi, si votre énumération est définie comme suit:

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

Vous pouvez faire ceci:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);


18

En supposant que vous utilisez des énumérations Java 5 (ce qui n'est pas si sûr puisque vous mentionnez une ancienne Enumerationclasse), vous pouvez utiliser la valueOfméthode de la java.lang.Enumsous-classe:

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

8

Utiliser la méthode statique valueOf(String)définie pour chaqueenum .

Par exemple, si vous avez, enum MyEnumvous pouvez direMyEnum.valueOf("foo")


4

J'aurais peut-être sur-conçu ma propre solution sans me rendre compte qu'elle Type.valueOf("enum string")existait réellement.

Je suppose que cela donne un contrôle plus granulaire, mais je ne suis pas sûr que ce soit vraiment nécessaire.

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

Je suppose que vous échangez IllegalArgumentExceptionpour RuntimeException(ou toute exception que vous souhaitez lancer) qui pourrait potentiellement nettoyer le code.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.