将string转换为等效的Enum值
是否有可能使用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的Enumtypes不同。
你可以简单地使用YourEnum.valueOf("String")
来获得等价的枚举types。
因此,如果你的枚举定义如下:
public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
你可以这样做:
String day = "SUNDAY"; Day dayEnum = Day.valueOf(day);
假设你使用Java 5的枚举(这是因为你提到旧的Enumeration
类不太确定),你可以使用java.lang.Enum
子类的valueOf
方法:
MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");
使用为每个enum
定义的静态方法valueOf(String)
。
例如,如果你有enum MyEnum
你可以说MyEnum.valueOf("foo")
我可能已经过度devise了我自己的解决scheme而没有意识到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
(或任何exception,你想扔)可能会清理代码。