当前位置: 首页 > 面试题库 >

非法前向引用和枚举

胡向阳
2023-03-14
问题内容

我正在用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;
    }
}


 类似资料:
  • 问题内容: 嗨,当我尝试从excel工作表中提取数据时,文件对象创建中出现了非法的前向引用错误。 如何解决呢? 问题答案: “非法前向引用”是指您试图在定义变量之前使用它。 在这种情况下,您尝试在的声明中调用on的方法。

  • 问题内容: 以下代码是否适用于合法正向引用?如果是,为什么? 问题答案: 上面的代码完全是合法的Java。在Java中,静态字段的初始化如下:首先,将所有字段的类型(0 ,或)设置为默认值,然后按照声明它们的顺序进行初始化。这意味着上述代码可以保证做到以下几点: 将和设置为零,因为这是s 的默认值。 通过调用进行初始化,以读取的值。由于尚未初始化,因此其值仍为0。 初始化为5。 这意味着它将取值为

  • 问题内容: 我试图编译其中一个Java类与拒绝 非法向前引用 错误,其中有问题的参考是词汇 后 的基准场。在显示相同行为时,将尽可能精简以下类: 并且的许多用途仅用作占位符,以删除不相关的代码段。 使用编译时,javac会显示以下错误消息: 因此,编译器抱怨的声明引用,而应在的声明范围内。但是,一旦删除了in 的声明的引用(例如,通过将第5行从更改为),编译器将接受该类。 如何解释呢?我对 前锋的

  • 本文向大家介绍Regular Expressions 反向引用和非捕获组,包括了Regular Expressions 反向引用和非捕获组的使用技巧和注意事项,需要的朋友参考一下 示例 由于对组进行了“编号”,因此某些引擎还支持匹配先前已再次匹配的组。 假设您想匹配长度等于3的两个等于字符串除以$您要使用的东西: 这将匹配以下任何字符串: 如果您希望引擎不为组编号,则可以声明其不捕捉。一个非捕获组