将String转换为等效的Enum值


Answers:


221

希望您意识到,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);


18

假设您使用Java 5枚举(由于您提到了旧Enumeration类,所以并不确定),您可以使用子类的valueOf方法java.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);
    }
}

我猜你交换IllegalArgumentExceptionRuntimeException(或任何异常要抛出),这有可能清理代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.