将String转换为等效的枚举值

Ank*_*kur 87 java enums

我是否可以使用Java 将a转换String为等效值Enumeration.

我当然可以用一个大的if-else声明来做这件事,但我想尽可能避免这种情况.

鉴于此文档:

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

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

ada*_*shr 203

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

您可以简单地使用YourEnum.valueOf("String")获取等效的枚举类型.

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

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY
}
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);
Run Code Online (Sandbox Code Playgroud)

  • @ArtanisZeratul - 如果枚举中不存在提供的值,您将收到 IllegalArgumentException。 (4认同)
  • 谢谢@adarshr,但是有问题。如果该值不属于该组会发生什么情况。例如 Day.valueOf("randomValue"); (2认同)

Xio*_*ion 16

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

MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");
Run Code Online (Sandbox Code Playgroud)


Ale*_*exR 7

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

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


ano*_*932 5

我可能已经过度设计了我自己的解决方案,而没有意识到它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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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