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.