case表达式必须是static final int的常量表达式?

Aza*_*Aza 13 java final switch-statement

我有一个final class Ring定义为:

final class Ring {
    public static final int OUT = 3;
    public static final int MID = 2;
    public static final int IN  = 1;
}
Run Code Online (Sandbox Code Playgroud)

我也有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;
}
Run Code Online (Sandbox Code Playgroud)

MorrisBoard.RING.OUT引用一个在程序生命周期中不可变的变量.所有值都是最终的.

但是,我仍然收到以下错误:case expressions must be constant expressions.我对此感到困惑 - MorrisBoard.RING.OUT是一个不变的表达.

这里发生了什么?

Den*_*ret 16

更换

 case MorrisBoard.RING.OUT:
Run Code Online (Sandbox Code Playgroud)

 case Ring.OUT:
Run Code Online (Sandbox Code Playgroud)

所以这将是一个常数,如"在编译时确定".

规范预先确定"SwitchLabel"必须是

  • case 然后是一个恒定的表达
  • case 后跟枚举值的名称
  • 要么 default

在本说明书中描述了被认为是有效常量表达式的内容.它相当有限.


Pir*_*hah 5

此问题的简单解决方案是:单击开关,然后按CTL + 1,它将把您的开关更改为if-else block语句,并将解决您的问题