我有一个类 A 需要实例化第二个类 B,其构造函数需要引用类 A 的同一对象...
看起来像:
public class A {
B b;
public A() {
b = new B(this);
}
}
public class B {
A a;
public B(A a) {
this.a = a;
}
}
好吧 - eclipse 一直提示这是不可能的。我想,这是因为此时 A 类的引用还没有“准备好”......? 但是如果我将 B 类的初始化移动到 A 中的一个单独的函数,我会从“外部”调用...
如何将这个自引用从外部传递给 B 的构造函数?
最佳答案
要非常小心,因为在构造 A 之前,它并不真正存在。如果 B 要调用 A 上的方法,程序应该会失败,因为您不能在构造 A 之前调用 A 上的方法。直到 A 从其构造函数代码完全返回,构造才算完成。
如果每次构造 A 时都必须用 A 初始化 B,那么最好为 A 创建一个工厂类,以保证在构造 A 之后初始化 B。它看起来像这样
public class AFactory {
public A newA() {
A a = new A();
B b = new B(a);
return a;
}
}
要使其 100% 正常工作,您可能需要限制 A() 构造函数的可见性。我个人会将 AFactory
放入与 A
相同的包中,并将访问设置为“默认”或“像这样私有(private)包”
package same.as.afactory;
public class A {
A() {
...
}
}
关于java - 如何将自引用传递给 java 中的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159510/