Konvertieren Sie den String in den entsprechenden Enum-Wert

98

Ist es mir möglich , a mit Java Stringin einen äquivalenten Wert in a umzuwandeln Enumeration?

Ich kann dies natürlich mit einer großen if-elseAussage tun , aber ich möchte dies nach Möglichkeit vermeiden.

Angesichts dieser Dokumentation:

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

Ich bin nicht zu hoffnungsvoll, dass dies ohne Wenn und Fallaussage möglich ist.

Ankur
quelle

Antworten:

219

Ich hoffe, Sie erkennen, java.util.Enumerationunterscheidet sich von den Java 1.5 Enum- Typen.

Sie können einfach verwenden YourEnum.valueOf("String"), um den entsprechenden Aufzählungstyp zu erhalten.

Wenn also Ihre Aufzählung wie folgt definiert ist:

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

Sie könnten dies tun:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);
adarshr
quelle
ja danke habe gerade diesen download
gesehen.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html
18

Angenommen, Sie verwenden Java 5-Aufzählungen (was nicht so sicher ist, da Sie die alte EnumerationKlasse erwähnen ), können Sie die valueOfMethode der java.lang.EnumUnterklasse verwenden:

MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");
Xion
quelle
8

Verwenden statische Methode valueOf(String)für jede definierte enum.

Zum Beispiel, wenn Sie haben enum MyEnum, können Sie sagenMyEnum.valueOf("foo")

AlexR
quelle
4

Ich hätte meine eigene Lösung möglicherweise überarbeitet, ohne zu bemerken, dass sie Type.valueOf("enum string")tatsächlich existiert.

Ich denke, es gibt eine detailliertere Kontrolle, aber ich bin mir nicht sicher, ob es wirklich notwendig ist.

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

Ich denke, Sie tauschen IllegalArgumentExceptiongegen RuntimeException(oder welche Ausnahme Sie auch immer werfen möchten), die möglicherweise Code bereinigen könnte.

anon58192932
quelle