是否可以使用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