将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,你想扔)可能会清理代码。