如何在switch case中使用enum类

时间:2014-09-25 20:54:03

标签: java enums compiler-errors switch-statement java-7

收到错误 - 案例表达式必须是常量表达式,当我尝试在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;

        }
    }
}

它给我编译时错误:

  

案例表达式必须是常量表达式

请建议我,我哪里出错。

3 个答案:

答案 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;

}