Java:大小写表达式必须是常量表达式

Java:大小写表达式必须是常量表达式,java,Java,我正在使用带有值的枚举,当我尝试在交换机情况下使用SmartCard.MessageType.SC\u CONN.getValue()时,我得到了错误 大小写表达式必须是常量表达式 在Java中,case语句必须是编译时常量,value不是,而是在运行时分配的。在Java中,case语句必须是编译时常量,value不是,而是在运行时分配的。switch语句的第二种情况编写错误值不能在此处使用。每种情况的值都必须是常数。让我们看看JLS是怎么说的 查看开关标签的定义。case后面的内容必须是Co

我正在使用带有值的枚举,当我尝试在交换机情况下使用
SmartCard.MessageType.SC\u CONN.getValue()
时,我得到了错误

大小写表达式必须是常量表达式


在Java中,case语句必须是编译时常量,
value
不是,而是在运行时分配的。

在Java中,case语句必须是编译时常量,
value
不是,而是在运行时分配的。

switch语句的第二种情况编写错误<代码>值不能在此处使用。每种情况的值都必须是常数。让我们看看JLS是怎么说的

查看
开关标签的定义。
case
后面的内容必须是
ConstantExpression
enumcontname
<代码>值
不是这两个值

这个问题的一个解决方案是使用
if…else if…else
语句

if (packetType == 0) {

} else if (packetType == value) {

} else if (packetType == 2) {

}
如果确实要保留switch语句,请在默认分支中执行If检查

switch (packetType) {
case 0:
    break;
case 2: 
    break;
default:
    if (packetType == value) { ... }
    break;
}

switch语句的第二种情况写错了<代码>值不能在此处使用。每种情况的值都必须是常数。让我们看看JLS是怎么说的

查看
开关标签的定义。
case
后面的内容必须是
ConstantExpression
enumcontname
<代码>值
不是这两个值

这个问题的一个解决方案是使用
if…else if…else
语句

if (packetType == 0) {

} else if (packetType == value) {

} else if (packetType == 2) {

}
如果确实要保留switch语句,请在默认分支中执行If检查

switch (packetType) {
case 0:
    break;
case 2: 
    break;
default:
    if (packetType == value) { ... }
    break;
}

案例值:
是问题所在,案例语句中不能有变量。
案例值:
是问题所在,案例语句中不能有变量。应该是注释。@jackjay我不同意。这肯定回答了这个问题。如果有的话,你的评论应该是一个答案。应该是一个评论。@jackjay我不同意。这肯定回答了这个问题。如果有的话,你的评论应该是一个答案。