java - 如何在 switch case 中使用枚举类

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

当我尝试在 switch case 语句中使用枚举类时,出现错误 - 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 expressions must be constant expressions

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

最佳答案

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

TestEnumClass value = TestEnumClass.valueOf(str);

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

关于java - 如何在 switch case 中使用枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26047929/

相关文章:

java - 我在println中不断收到 “error:Cannot find symbol”

c++ - 使用模板化接口(interface)导致 “Undefined reference to”

java - 自定义 SimpleCursorAdapter - onClickListener 的重载 bindView 问题

java - 确定所有 Java 发行版中的主要 Java 版本

ios - 什么是通过 Enum 进行可重用 UIAlertController 配置的 Swift 最佳实践

c - 可以使用枚举来限制 c 整数范围吗?

Java ArrayList 是从多个类访问相同列表的好方法

java - 无法使用 HTTPS 连接到套接字

c# - 如何找出整数值中哪些枚举项是 "hidden"

compiler-errors - 构建android源码报错