枚举值的非法参数异常:没有枚举常量类



我过去曾在java中使用过枚举,但由于某种原因,我现在遇到了一个奇怪的错误。 它引发错误的代码行是:

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

我得到了一个

java.lang.IllegalArgumentException: No enum const class
  allautomator.ConfigProperties.language 

在示例行中是一个字符串数组。

我现在真的很困惑,我不知道可能出了什么问题。

枚举常量区分大小写,因此请确保您的常量确实是小写的。另外,我建议您也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

我正在使用类似的概念,但在失败的情况下具有默认值

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;
        }
    }
}

最新更新