enum valueOf IllegalArgumentException:没有枚举 const 类

发布于 2024-11-08 11:53:36 字数 337 浏览 0 评论 0原文

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

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

我在示例行中得到的

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

是一个字符串数组。

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

I have used enums in java in the past but for some reason I am getting a strange error right now. the Line of code that it is throwing the error is:

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

I am getting a

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

in the example line is an array of Strings.

I am just really confused right now, I do not know what could possibly be wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清醇 2024-11-15 11:53:36

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

The enum constants are case sensitive, so make sure you're constants are indeed lower case. Also, I would suggest that you trim() the input as well to make sure no leading / trailing white-space sneak in there:

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

For reference, here is a working sample program containing your line:

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

Output:

Property 1
樱&纷飞 2024-11-15 11:53:36

我使用类似的概念,但有一个默认值以防失败

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

I am using a similar concept, but having a default value in case of fail

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;
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文