将String转换为等效的枚举值

时间:2011-08-14 13:07:32

标签: java enums

我是否可以使用Java将String转换为Enumeration中的等效值。

我当然可以使用大if-else语句执行此操作,但如果可能的话,我希望避免这种情况。

鉴于此文件:

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

如果没有ifs或case case,我不太希望这是可能的。

4 个答案:

答案 0 :(得分:191)

希望您意识到,java.util.Enumeration与Java 1.5 Enum类型不同。

您只需使用YourEnum.valueOf("String")即可获得等效的枚举类型。

因此,如果您的枚举定义如下:

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

你可以这样做:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);

答案 1 :(得分:16)

假设您使用Java 5枚举(由于您提到旧的Enumeration类,因此不太确定),您可以使用valueOf子类的java.lang.Enum方法:

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

答案 2 :(得分:7)

使用为每个valueOf(String)定义的静态方法enum

例如,如果您有enum MyEnum,则可以说MyEnum.valueOf("foo")

答案 3 :(得分:3)

我可能已经过度设计了我自己的解决方案而没有意识到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,这可能会清除代码。