我有一个如下的Enum类。
public enum TestEnum {
TEST1("test1"), TEST2("test2");
private String name;
TestEnum(String name) {
this.name= name;
}
public String getName(){
return name;
}
}
我试图在SWITCH语句中使用它来与字符串进行比较,但无法使用。参见下面的屏幕截图,我只看到.class
选项。我非常惊讶,因为在另一个框中可以看到这些值。
现在,我遇到的另一个问题是,让我说一旦看到值,我就想做case TestEnum.TEST1.getName():
以便它可以与switch语句一起使用,但是在这里我得到了错误,说只允许常量用于switch情况。
请有人帮忙。基本上,我想要的不是在字符串中对照“ test1”或“ test2”之类的可能字符串来检查字符串,而是要使用SWITCH来做到这一点。
顺便说一句,我有32个IF-ELSEIF块,有人告诉我应该改用SWTICH,因为我使用32个IF-ELSEIF块是不好的。
答案 0 :(得分:1)
大小写标签是常量。 考虑在枚举类中添加静态方法:
public enum TestEnum {
TEST1("test1"), TEST2("test2");
private String name;
TestEnum(String name) {
this.name= name;
}
public String getName(){
return name;
}
public static TestEnum fromName(String name) {
for (TestEnum e: values()) {
if (e.name.equals(name)) {
return e;
}
}
throw new IllegalArgumentException("Name not found: " + name);
}
}
您将能够编写一个switch语句:
switch (TestEnum.fromName(name)) {
case TEST1:
//...
break;
case TEST2:
//...
break;
}
答案 1 :(得分:1)
您可以创建自己的方法以将字符串值转换为枚举。
例如,这是我经常使用的方法:
public enum TestEnum {
// Enum constants
// Enum fields, constructors, etc..
public static TestEnum fromName(String name) {
return Arrays.stream(values())
.filter(e -> e.name.equals(name))
.findFirst()
.orElse(null);
}
}
现在可以在switch
语句中使用结果枚举
答案 2 :(得分:1)
您可以考虑使用String
常量而不是Enum
。例如:
public class TestEnum {
private static final String TEST1 = "test1";
private static final String TEST2 = "test2";
}
然后可以像这样在switch
语句中使用:
switch(name) {
case TestEnum.TEST1:
break;
case TestEnum.TEST2:
break;
default:
break;
}
然后,IDE中的完成应为您提供选项TEST
,TEST2
,...。