我有一个类似于以下内容的枚举类:
public enum MyEnum {
VALUE1("value.1"),
VALUE2("value.2");
private String value;
private MyEnum(String value) { this.value = value; }
public String getId() { return id; }
}
我想对枚举的值有一个switch语句。如下所示:
switch (myString) {
case MyEnum.VALUE1.getId():
...
}
我得到以下编译时错误:case表达式必须是常量表达式。
有没有办法让它与enum和switch语句一起使用?我在枚举中添加值的原因是因为我想要一些带有“。”的ID。和其他不允许的字符。
答案 0 :(得分:6)
添加一个静态方法,接受String id
作为参数并返回相应的MyEnum
:
public enum MyEnum {
VALUE1("value.1"),
VALUE2("value.2");
private String id;
private MyEnum(String value) {
this.id = value;
}
public String getId() {
return id;
}
public static MyEnum fromId(String id){
for(MyEnum e:MyEnum.values()){
if(e.getId().equals(id)){
return e;
}
}
throw new RuntimeException("Enum not found");
}
public static void main(String[] args) {
String value = "value.2";
switch(MyEnum.fromId(value)){
case VALUE1:
System.out.println("ID 1");
break;
case VALUE2:
System.out.println("ID 2");
break;
}
}
}
答案 1 :(得分:0)
走另一条路:不要在case语句中查找每个枚举的id,而是在switch语句中查找id的enum。
switch (MyEnum.getEnumById(myString)) {
case VALUE1:
// ./..
break;
case VALUE2:
// ./..
break;
case VALUE3:
// ./..
break;
}
有几种方法可以编写getEnumById方法。 This question有几个选择。