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