[英]How to use ENUM with SWITCH, for String based comparison
我有一个下面的枚举类。
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():
进行case TestEnum.TEST1.getName():
以便它可以与switch语句一起使用,但是在这里我得到了错误,指出只允许使用常量开关盒。
有人可以帮忙吗? 基本上,我想要的不是代替对照“ test1”或“ test2”之类的可能字符串数检查字符串,而是要使用SWITCH进行此操作。
顺便说一句,我有32个IF-ELSEIF块,有人告诉我,我应该改用SWTICH,因为我使用32个IF-ELSEIF块是不好的。
大小写标签是常量。 考虑在枚举类中添加静态方法:
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;
}
您可以创建自己的方法以将字符串值转换为枚举。
例如,这是我经常使用的方法:
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
语句中使用结果枚举
您可以考虑使用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
,...。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.