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(也很难看)?
有一个第二个构造函数,它不接受任何参数并构造自己的参数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.