Java 带字符串的开关中需要常量表达式

Java 带字符串的开关中需要常量表达式,java,enums,switch-statement,constant-expression,Java,Enums,Switch Statement,Constant Expression,我已声明此枚举类: public enum class RoleName { Worker, Boss } 我想在开关/机箱中使用它 switch (requestRole.getName()) { case RoleName.Worker.name(): 但我有这个编译错误 constant expression required 如果我删除class我得到了这个IntelliJ IDEA错误:在'enum'后面应该是'class'关键字这里有两个错误: 枚举的

我已声明此枚举类:

public enum class RoleName {
    Worker,
    Boss
}
我想在开关/机箱中使用它

switch (requestRole.getName()) {
    case RoleName.Worker.name():
但我有这个编译错误

constant expression required 
如果我删除
class
我得到了这个IntelliJ IDEA错误:
在'enum'后面应该是'class'关键字

这里有两个错误:

  • 枚举的定义中不应包含
    class
    。根据经验,常量应为大写

    enum RoleName {
        WORKER,
        BOSS;
    }
    
  • RoleName.Worker.name()
    不允许作为
    大小写
    表达式,因为它不是。您可以将
    requestRole.getName()
    转换为
    RoleName
    ,并将其用作


  • enum
    not
    enum class
    将您的RoleName.Worker.name()更改为“Worker”,这真的是删除
    class
    时收到的错误消息吗?正是这些词?你是想把一个包含
    RoleName
    常量名称的字符串转换成实际的
    RoleName
    对象吗?@Sandro我看到你在这个问题上问了另一个问题并将其删除了,请随意问一下这里还有什么不清楚的地方-我会更新我的答案#2不是完全相同的代码,因为如果
    requestRole.getName()
    的值与枚举名不匹配,则问题代码将起作用(如果有),并且此代码将抛出
    IllegalArgumentException
    。我花了很多时间寻找有效的DUP候选项。。。但是,所有这些问题都略有不同。去吧,让它成为开关箱调用方法的DUP候选者@CarlosHeuberger因为
    requestRole
    不是
    RoleName
    @CarlosHeuberger
    getName
    不是枚举方法它实际上是
    案例工作者:
    。Java不允许在
    case
    语句中使用限定的枚举常量。
    switch (RoleName.valueOf(requestRole.getName())) {
        case WORKER: /* ... */ break;
    }