我正在用Java编写游戏,该游戏由一排瓷砖组成。我将无法以独创的方式定义图块的边缘以及它们之间的相互关系,例如为了获得图块的相对边缘,我希望能够只键入TOP.opposite()。但是,当使用枚举定义这些边时,我最终不得不在构造函数中转发至少其中两个引用:

public enum Edge {

   TOP(Edge.BOTTOM), //illegal forward reference
   BOTTOM(Edge.TOP),
   LEFT(Edge.RIGHT), //illegal forward reference
   RIGHT(Edge.LEFT);

   private Edge opposite;

   private Edge(Edge opp){
      this.opposite = opp;
   }

   public Edge opposite(){
      return this.opposite;
   }
}

有没有什么办法可以使用枚举来解决这个问题呢?

最佳答案

您可以这样做不是那么直观。

public enum Edge {
    TOP, BOTTOM, LEFT, RIGHT;
    private Edge opposite;

    static {
        TOP.opposite = BOTTOM;
        BOTTOM.opposite = TOP;
        LEFT.opposite = RIGHT;
        RIGHT.opposite = LEFT;
    }
    public Edge opposite(){
        return this.opposite;
    }
}

09-05 21:43