Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法解析Switch语句中的枚举_Java_Enums_Switch Statement - Fatal编程技术网

Java 无法解析Switch语句中的枚举

Java 无法解析Switch语句中的枚举,java,enums,switch-statement,Java,Enums,Switch Statement,也许有人可以填补我的理解空白: 我有一个如下所示的枚举: enum MyEnum { VALUE_1("id1", "name"), VALUE_2("id2", "name") ... } enum MyEnum { VALUE_1("id1", "name"), VALUE_2("id2", "name"), ... private static final Map<String, MyEnum> instance

也许有人可以填补我的理解空白: 我有一个如下所示的枚举:

enum MyEnum {

    VALUE_1("id1", "name"),
    VALUE_2("id2", "name")

    ...
}
enum MyEnum {

    VALUE_1("id1", "name"),
    VALUE_2("id2", "name"),
    ...

    private static final Map<String, MyEnum> instances = new HashMap<>();

    static {
        for (MyEnum myEnum : values()) {
            instances.put(myEnum.getId(), myEnum);
        }
    }

    public static MyEnum getById(String id) {
        return instances.get(id);
    }
}
在我的代码中执行此操作时,效果良好:

if(MyEnum.VALUE_1.getId().equals(someVar)) {

}
但是这个,没有编译

switch (someVar) {

    case MyEnum.VALUE_1.getId():
    ...
}
IDE抱怨无法解决MyEnum的问题


这是为什么?

您试图在case表达式中使用方法调用的结果,这在Java中是非法的,因为case标签需要常量表达式,可以在编译时解析。方法调用的结果不是常量表达式,因此不能用作大小写标签


您必须使用
if
语句;它不需要常量表达式。

必须在大小写标签中使用常量,因此不允许调用方法。然而,为了能够使用switch语句并使代码更具可读性,您可以实现如下内容:

enum MyEnum {

    VALUE_1("id1", "name"),
    VALUE_2("id2", "name")

    ...
}
enum MyEnum {

    VALUE_1("id1", "name"),
    VALUE_2("id2", "name"),
    ...

    private static final Map<String, MyEnum> instances = new HashMap<>();

    static {
        for (MyEnum myEnum : values()) {
            instances.put(myEnum.getId(), myEnum);
        }
    }

    public static MyEnum getById(String id) {
        return instances.get(id);
    }
}

谢谢你的评论,我从来不知道+1.