1. ホーム
  2. ジャワ

[解決済み] static final int の場合、case 式は定数式でなければならない?

2022-03-12 21:30:22

質問

私は 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:

つまり、これはコンパイル時に決定される定数となります。

仕様 前景 スイッチラベルは、次のようなものでなければなりません。

  • case に続いて、定数式
  • case に続いて、enum 値の名前
  • または default

有効な定数表現とみなされるのは 仕様書では以下のように記述されています。 . かなり限定的です。