2011-05-19 108 views
5

我在过去使用过java中的枚举,但由于某种原因,我现在正在收到一个奇怪的错误。的,它是引发错误代码的行是:enum valueOf IllegalArgumentException:没有枚举const类

switch(ConfigProperties.valueOf(line[0].toLowerCase()){ 
    ... 
} 

我得到一个

java.lang.IllegalArgumentException: No enum const class 
    allautomator.ConfigProperties.language 
在示例线

是一个字符串数组。

我现在只是很困惑,我不知道什么可能是错的。

+2

和你的枚举是什么样的? – Bozho 2011-05-19 18:07:30

+1

请发布您的枚举和行[0]的值。 valueOf函数需要一个EXACT字符串。没有额外的空格,标点符号等等。我不知道它是否区分大小写,但我现在假设它。 – 2011-05-19 18:07:34

+0

你可以添加你的Enum类和行数组的内容吗?只是为了确保我们可以看到什么是投入和什么枚举你有。 – 2011-05-19 18:08:24

回答

16

枚举常量是区分大小写的,所以确保你的常量确实是小写。另外,我建议你trim()输入,以及以确保没有领先/尾部空白忙里偷闲有:

ConfigProperties.valueOf(line[0].toLowerCase().trim()) 

供参考,在这里是包含您行工作示例程序:

enum ConfigProperties { prop1, prop2 } 

class Test { 
    public static void main(String[] args) { 

     String[] line = { "prop1" }; 

     switch (ConfigProperties.valueOf(line[0].toLowerCase())) { 
     case prop1: System.out.println("Property 1"); break; 
     case prop2: System.out.println("Property 2"); break; 
     } 
    } 
} 

输出:

Property 1 
+0

我确定了这种情况,他们是小写,但修剪是我需要做的。谢谢。 – 2011-05-19 18:17:45

+0

不客气! – aioobe 2011-05-19 18:18:15

+1

@ajoobe您在枚举类型上调用'valueOf()'。但是我没有在[javadocs](http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html)中看到这个方法。为什么这样?方法声明看起来像'public static > T valueOf(Class enumType,String name)'。在这里你只传递第二个参数?我在这里错过了什么? – Geek 2013-03-16 07:49:27

0

我使用了类似的概念,但具有在故障情况下的默认值

public enum SortType { 

    PRICE_ASC("price_asc"), 
    PRICE_DESC("price_desc"), 
    MODEL_ASC("model_asc"), 
    MODEL_DESC("model_desc"); 

    private String name; 

    SortType(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    static public SortType lookup(String id, SortType defaultValue) { 
     try { 
      return SortType.valueOf(id); 
     } catch (IllegalArgumentException ex) { 
      return defaultValue; 
     } 
    } 
}