case表达式必须是static final int的常量表达式?
我有一个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
是一个常量表达式。
这里发生了什么?
更换
case MorrisBoard.RING.OUT:
同
case Ring.OUT:
所以这将是一个常数,如“在汇编时确定”。
规范预先确定“SwitchLabel”必须是
-
case
后跟一个常量表达式 -
case
后跟枚举值的名称 - 或
default
在本说明书中描述了被认为是有效的常量表达式。 它相当有限。
解决此问题的简单方法是:单击开关然后按CTL + 1,它会将您的开关更改为if-else阻止语句,并将解决您的问题