【问题标题】:How to use enum class in switch case如何在开关盒中使用枚举类
【发布时间】:2014-09-25 20:54:03
【问题描述】:

出现错误 - case 表达式必须是常量表达式,当我尝试在 switch case 语句中使用枚举类时:

我的枚举类是,

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;

        }
    }
}

它给了我编译时错误:

case 表达式必须是常量表达式

请建议我,我哪里出错了。

【问题讨论】:

  • 您检查的值需要是编译时已知的常量。 TestEnumClass.Test1.getEnumConstant() 不被认为是恒定的,即使在这种情况下它不会改变。
  • 感谢您的信息,那我该如何使用呢?将枚举移动到静态常量是唯一的方法吗?但我只想使用枚举。有什么办法吗?
  • 您有几个选择。您可以使用final static Strings,也可以使用ifs 代替开关,或者您可以打开TestEnumClass.valueOf(str) 并让cases 本身成为枚举值。

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


【解决方案1】:

您不能将方法的结果用作 switch 语句中的 case。开关针对恒定情况进行了优化。枚举非常适合这个,但你必须:

TestEnumClass value = TestEnumClass.valueOf(str);

switch (value) {
    case TEST1: ...
    case TEST2: ...
}

【讨论】:

  • 非常感谢。改变喜欢下面,它的工作很好: TestEnumClass str = TestEnumClass.valueOf(args[0]); switch(str){ case TEST1 : System.out.println("test1");休息;案例 TEST2 : System.out.println("test2");休息; }
【解决方案2】:

您的switch 表达式位于String 上,您需要将其更改为TestEnumClass 类型的变量

【讨论】:

  • ...然后将case 标签更改为TEST1TEST2TEST3
【解决方案3】:

你正在做 switch 超过 Stringcase 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;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多