15

我有一个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是一个常量表达式。

这里发生了什么?

4

2 回答 2

17

代替

 case MorrisBoard.RING.OUT:

 case Ring.OUT:

所以这真的是一个常数,就像“在编译时确定”一样。

规范明确规定“ SwitchLabel ”必须是

  • case后跟一个常量表达式
  • case后跟枚举值的名称
  • 或者default

规范中描述了什么被认为是有效的常量表达式。它相当有限。

于 2013-01-13T21:04:05.177 回答
8

这个问题的简单解决方法是:点击开关,然后按CTL+1,它将把你的开关变成if-else块语句,解决你的问题

于 2014-03-23T08:18:36.240 回答