我是否可以使用Java将String
转换为Enumeration
中的等效值。
我当然可以使用大if-else
语句执行此操作,但如果可能的话,我希望避免这种情况。
鉴于此文件:
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html
如果没有ifs或case case,我不太希望这是可能的。
答案 0 :(得分:191)
希望您意识到,java.util.Enumeration
与Java 1.5 Enum类型不同。
您只需使用YourEnum.valueOf("String")
即可获得等效的枚举类型。
因此,如果您的枚举定义如下:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
你可以这样做:
String day = "SUNDAY";
Day dayEnum = Day.valueOf(day);
答案 1 :(得分:16)
假设您使用Java 5枚举(由于您提到旧的Enumeration
类,因此不太确定),您可以使用valueOf
子类的java.lang.Enum
方法:
MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");
答案 2 :(得分:7)
使用为每个valueOf(String)
定义的静态方法enum
。
例如,如果您有enum MyEnum
,则可以说MyEnum.valueOf("foo")
答案 3 :(得分:3)
我可能已经过度设计了我自己的解决方案而没有意识到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
,这可能会清除代码。