私は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:
したがって、これは「コンパイル時に決定」のように実際には一定になります。
仕様 precises 「SwitchLabel」は
case
の後に定数式が続くcase
の後に列挙値の名前が続くdefault
有効な定数式と見なされるのは ここで仕様に記載されています です。それはかなり制限されています。
この問題の簡単な解決策は次のとおりです。switchをクリックしてから、CTL + 1、を押します。スイッチがif-elseブロックステートメントに変更され、問題が解決されます。