编程语言
首页 > 编程语言> > Java – 枚举 – 逻辑循环引用

Java – 枚举 – 逻辑循环引用

作者:互联网

参见英文答案 > Java enum- Cannot reference a field before it is defined                                    8个
想象一下以下组成的例子:

public enum Hand {
  ROCK(SCISSORS),
  PAPER(ROCK),
  SCISSORS(PAPER);

  private final Hand beats;

  Hand(Hand beats) {
    this.beats = beats;
  }
}

我将得到错误的非法前向引用,用于前向引用SCISSORS.

有没有办法在Java中处理这样的前向引用?

或者你会如何模拟这种情况,你在几个枚举值之间有一个逻辑循环引用?

解决方法:

在定义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

标签:circular-reference,java,enums,forward-reference
来源: https://codeday.me/bug/20190823/1702021.html