2016-12-20 9 views
3

には、以下の構成された例を想像してみてください。のJava - - 列挙型の論理循環参照


Javaでこのような前方参照を処理する方法はありますか?

または、このような状況をモデル化すると、いくつかの列挙型の値の間に論理的循環参照がありますか?

+0

エラー? – ItamarG3

+0

を「不正な転送参照」エラー情報で更新してください。 – JDC

+0

メソッドの中で 'switch'を使うことができます。 –

答えて

5

SCISSORSを定義する前にROCKに割り当てることはできません。代わりに、静的ブロックに値を割り当てることができます。

私は、人々がコンストラクタでString値を使用する例をたくさん見てきましたが、実際の値が宣言された後で実際の値を割り当てるのがより具体的です。これはカプセル化され、beatsインスタンス変数は変更できません(リフレクションを使用しない限り)。

public enum Hand { 
    ROCK, 
    PAPER, 
    SCISSORS; 

    private Hand beats; 

    static { 
     ROCK.beats = SCISSORS; 
     PAPER.beats = ROCK; 
     SCISSORS.beats = PAPER; 
    } 

    public Hand getBeats() { 
     return beats; 
    } 

    public static void main(String[] args) { 
     for (Hand hand : Hand.values()) { 
      System.out.printf("%s beats %s%n", hand, hand.getBeats()); 
     } 
    } 
} 

出力

ROCK beats SCISSORS 
PAPER beats ROCK 
SCISSORS beats PAPER 
+2

なぜこれを下落させましたか?それは実際に私によく見える –

+1

'beat'フィールドの' final'修飾子のために、編集前のコードが動作しませんでした。 – JDC