收到错误 - 案例表达式必须是常量表达式,当我尝试在switch case语句中使用enum类时:
我的枚举课是,
public enum TestEnumClass {
TEST1("TEST1"),
TEST2("TEST2"),
TEST3("TEST3");
private String enumConstant;
private TestEnumClass(String algoConstant) {
this.enumConstant = algoConstant;
}
public String getEnumConstant() {
return enumConstant;
}
}
我正在尝试在另一个类文件中使用枚举TestEnumClass,
public class TestIndexOf {
public static void main(String[] args) {
String str = args[0];
switch(str){
case TestEnumClass.Test1.getEnumConstant() : System.out.println("test1"); break;
case TestEnumClass.Test2.getEnumConstant() : System.out.println("test2"); break;
}
}
}
它给我编译时错误:
案例表达式必须是常量表达式
请建议我,我哪里出错。
答案 0 :(得分:3)
您不能在switch语句中使用方法的结果作为案例。开关针对常量情况进行了优化。枚举非常适合这种情况,但您必须:
TestEnumClass value = TestEnumClass.valueOf(str);
switch (value) {
case TEST1: ...
case TEST2: ...
}
答案 1 :(得分:1)
您的switch
表达式位于String
,您需要将其更改为TestEnumClass
类型的变量
答案 2 :(得分:1)
您正在switch
而不是String
,但case
TestEnumClass.TEST1.getEnumConstant()
根据JLS不是编译时间常量。 case
语句需要编译时常量值。为了纠正错误你可以这样做
String str = args[0];
TestEnumClass e = TestEnumClass.valueOf(str);
switch(e){
case TEST1: System.out.println("test1"); break;
case TEST2 : System.out.println("test2"); break;
}