xen*_*ite 1 java oop reference
我有一个类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;
}
}
Run Code Online (Sandbox Code Playgroud)
日食一直在抱怨这是不可能的.我认为,这是因为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;
}
}
Run Code Online (Sandbox Code Playgroud)
为了使其正常工作100%,您可能需要限制A()构造函数的可见性.我个人会把AFactory相同的包放入A,并使访问"默认"或"包私有这样
package same.as.afactory;
public class A {
A() {
...
}
}
Run Code Online (Sandbox Code Playgroud)