两个对象相互引用,带有最终引用

use*_*528 3 java constructor final

我有一个看起来像这样的类:

public class Node {
    private final Node otherNode;
    public Node(Node otherNode) {
        this.otherNode = otherNode;
    }
}
Run Code Online (Sandbox Code Playgroud)

并希望做类似的事情

Node n1, n2 ;
n1 = new Node(n2);
n2 = new Node(n1);
Run Code Online (Sandbox Code Playgroud)

但显然不能,因为n2尚未初始化.我不想使用setter来设置otherNode,因为它是最终的,因此只能设置一次.实现这一目标的最简洁方法是什么?是否有一些我不熟悉的Java语法让我这样做?我应该使用除了构造函数之外的初始化方法(丑陋),还是只使用一个setter(也很难看)?

rge*_*man 9

有一个第二个构造函数,它不接受任何参数并构造自己的参数Node,将自己作为另一个的"其他"传递.

public class Node
{
   private final Node otherNode;

   public Node(Node other)
   {
      otherNode = other;
   }

   public Node()
   {
      otherNode = new Node(this);
   }

   public Node getOther()
   {
      return otherNode;
   }
}
Run Code Online (Sandbox Code Playgroud)

然后在使用它时:

Node n1 = new Node();
Node n2 = n1.getOther();
Run Code Online (Sandbox Code Playgroud)

确保他们互相引用:

System.out.println(n1 == n1.getOther().getOther());
System.out.println(n2 == n2.getOther().getOther());
System.out.println(n1 == n2.getOther());
System.out.println(n2 == n1.getOther());
Run Code Online (Sandbox Code Playgroud)

这些全部印刷true.