java - 非法前向引用和枚举

标签 java enums

我正在用java编写一个游戏,它由瓷砖网格组成。我不希望能够直观地定义图 block 的边缘以及它们彼此之间的关系,例如要获得图 block 的相对边缘,我希望能够仅输入 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;
    }
}

关于java - 非法前向引用和枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58308921/

相关文章:

java - 两个微服务之间的通信

java - JNDI API 的工作原理

ios - 在哪里放置 View Controller 相关的枚举

rustdoc 链接到枚举变体

java - 如何在java中将字符串数组转换为枚举数组

enums - 有没有办法创建枚举值的别名?

java - 如何使用 JUnit 测试没有 @SpringBootApplication 的 Java Spring Boot 应用程序?

java - 如何从自定义 LinkedList 类继承?

java - NetBeans Glassfish 卡在 "In-place deployment at..."

c++ - 将作用域枚举转换为基础类型