2011-08-14 60 views

回答

123

希望你能意识到,java.util.Enumeration是来自不同Java 1.5 Enum类型。

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

因此,如果您的枚举的定义是这样:

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

你可以这样做:每个enum定义

String day = "SUNDAY"; 

Day dayEnum = Day.valueOf(day); 
+0

是的,谢谢刚刚看到这个http://download.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html – Ankur

13

假设你使用Java 5枚举(这是不那么肯定,因为你提到老Enumeration类),你可以使用java.lang.Enum子类的valueOf方法:

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

使用静态方法valueOf(String)

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

0

我可能已经过度设计自己的解决方案,而没有意识到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(或任何异常要抛出),这可能会清理代码。