2011-08-14 88 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(或任何異常要拋出),這可能會清理代碼。