是否可以使用Java將String
轉換爲Enumeration
中的等效值。將字符串轉換爲等價的枚舉值
我當然可以用大if-else
聲明來做到這一點,但如果可能的話,我想避免這種情況。
鑑於此文件:
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html
我不是太樂觀,這是可能沒有IFS或case語句。
是否可以使用Java將String
轉換爲Enumeration
中的等效值。將字符串轉換爲等價的枚舉值
我當然可以用大if-else
聲明來做到這一點,但如果可能的話,我想避免這種情況。
鑑於此文件:
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html
我不是太樂觀,這是可能沒有IFS或case語句。
希望你能意識到,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);
假設你使用Java 5枚舉(這是不那麼肯定,因爲你提到老Enumeration
類),你可以使用java.lang.Enum
子類的valueOf
方法:
MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");
使用靜態方法valueOf(String)
。
例如,如果你有enum MyEnum
你可以說MyEnum.valueOf("foo")
我可能已經過度設計自己的解決方案,而沒有意識到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
(或任何異常要拋出),這可能會清理代碼。
是的,謝謝剛剛看到這個http://download.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html – Ankur