我将final class Ring
定义为:
final class Ring {
public static final int OUT = 3;
public static final int MID = 2;
public static final int IN = 1;
}
我还有一个public class MorrisBoard
,代码如下:
public class MorrisBoard {
public static final Ring RING = new Ring();
private boolean checkMillBy(int ring, int x, int y) {
switch(ring) {
case MorrisBoard.RING.OUT:
//...
case MorrisBoard.RING.MID: //etc.
//...
}
return false;
}
MorrisBoard.RING.OUT
引用一个在程序生命周期内不可变的变量。所有值都是最终的。
但是,我仍然收到以下错误:case expressions must be constant expressions
。我对此感到困惑 - MorrisBoard.RING.OUT
是一个常量表达式。
这里发生了什么?
答案 0 :(得分:16)
替换
case MorrisBoard.RING.OUT:
与
case Ring.OUT:
所以这真的是一个常数,就像“在汇编时决定”一样。
“SwitchLabel”必须为
的规范precisescase
后跟常量表达式case
后跟枚举值的名称default
什么被认为是有效的常量表达式described here in the specification。它相当有限。
答案 1 :(得分:3)
此问题的简单解决方案是: 点击开关,然后按 CTL + 1,它会将您的切换更改为if-else阻止声明,并将解决您的问题