文字列を同等の列挙値に変換


99

Javaを使用StringしてEnumeration、をの同等の値に変換することは可能ですか?

もちろん、これは大きなif-elseステートメントで行うこともできますが、できれば避けたいと思います。

このドキュメントを考えると:

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

ifsやcaseステートメントなしでこれが可能であることをあまり期待していません。

回答:


220

java.util.EnumerationJava 1.5 列挙型とは異なります。

を使用YourEnum.valueOf("String")して、同等の列挙型を取得できます。

したがって、列挙型が次のように定義されている場合:

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

あなたはこれを行うことができます:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);


18

Java 5列挙型(古いEnumerationクラスについて言及しているためそれほど明確ではありません)を使用していると仮定するとvalueOfjava.lang.Enumサブクラスのメソッドを使用できます。

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

8

valueOf(String)それぞれに定義された静的メソッドを使用しますenum

例えばあなたが持っているenum MyEnumならあなたは言うことができますMyEnum.valueOf("foo")


4

Type.valueOf("enum string")実際に存在することに気付かずに、自分のソリューションを過度に設計した可能性があります。

よりきめ細かい制御ができると思いますが、本当に必要かどうかはわかりません。

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

コードをクリーンアップできる可能性のある交換(またはスローしたい例外)を交換IllegalArgumentExceptionしていると思いますRuntimeException

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.