2013-01-13 21 views
12

Iのように定義final class Ring有する:ケース式はstatic final intの定数式でなければなりませんか?

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プログラムの寿命のために不変である変数を参照:私はまた、次のコードでpublic class MorrisBoard持ち

​​

を。すべての値は最終値です。

しかし、私はまだ次のエラーを受け取ります:case expressions must be constant expressions。私はこれで混乱しています - MorrisBoard.RING.OUTは定数式です。

ここでは何が起こっていますか?

+0

を解決します_compile time constant_、 'RING'は実行時に割り当てられます。 –

+4

FYI: 'final static'の束の代わりに' enum'を使用することを検討してください... –

+3

インスタンスメンバーを持たないクラス、つまり静的メンバーを持たないクラスのインスタンスを作成する必要はありません –

答えて

16

だから、これは本当に "コンパイル時に決定" のように一定になる

case Ring.OUT: 

case MorrisBoard.RING.OUT: 

を交換してください。 "SwitchLabelは" 列挙値の名前

  • またはdefault
  • 何が続く定数式

  • case続い

  • +0

    finalクラスのRingが静的でないときにこれが動作するのでしょうか? – Hurda

    +0

    この特定のケースでは、これは適切な答えです(ありがとう!)。しかし、私はそれがどのように処理されるか知りたいと思うだろう。 – Zyerah

    +0

    @Hurda 'TypeName.Identifier'で外部定義定数を参照できない場合、それは無効です。 –

    0
    この問題の

    簡単な解決策がある:それはある必要があります、その後 スイッチをクリックし、CTL + 1を押して、それはのif-elseブロック文にあなたのスイッチを変更し、あなたの問題

    関連する問題