使用valueOf使用java.lang.IllegalArgumentException崩溃的枚举字符串

时间:2016-11-16 11:51:37

标签: java enums

我有一个枚举,其字符串定义如下

Exception in thread "main" java.lang.IllegalArgumentException: No enum constant HelloWorld.MyEnumType.primary
    at java.lang.Enum.valueOf(Enum.java:238)
    at HelloWorld$MyEnumType.valueOf(HelloWorld.java:11)
    at HelloWorld.main(HelloWorld.java:36)

当我用下面的字符串

定义我的枚举时
{{1}}

崩溃

{{1}}

我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

您可以致电MyEnumType.valueOf(x.toUpperCase())让它查找大写版本。

e.g。

MyEnumType e = MyEnumValue.valueOf("primary".toUpperCase());
  

我是否有可能提供Secondary-Style,它可以实例化我想要的枚举,而无需手动操作字符串?

您可以提供替代查找的映射。

static final Map<String, MyEnumType> altMap = new HashMap<>();
static {
   for (MyEnumType met : MyEnumType.values()) {
        altMap.put(met.myEnumType, met);
        // add more aliases as desired.
   }
}

public static MyEnumType lookup(String str) {
    MyEnumType met = altMap.get(str);
    return met == null ? valueOf(str) : met;
}