我有一个像下面这样的枚举,但是 eclipse 说每个相对的对的第一个定义中都有错误。

public enum Baz{
  yin(yang),    //Cannot reference a field before it is defined
  yang(yin),
  good(evil),   //Cannot reference a field before it is defined
  evil(good);

  public final Baz opposite;

  Baz(Baz opposite){
    this.opposite = opposite;
  }
}

我要完成的工作是能够使用Baz.something.opposite获得Baz.something的相反对象。有没有可能的解决方法?在此示例中,是否在定义yangbad之前,为yingood保留了空的占位符?

最佳答案

您可以尝试类似的方法:

public enum Baz{
  yin("yang"),
  yang("yin"),
  good("evil"),
  evil("good");

  private String opposite;

  Baz(String opposite){
    this.opposite = opposite;
  }

  public Baz getOpposite(){
     return Baz.valueOf(opposite);
  }
}

然后引用为
Baz.something.getOpposite()

通过以字符串表示形式查找枚举值,应该可以完成您想要的工作。我认为您无法将其与对Baz的递归引用一起使用。

10-06 01:47