如何在java中传递构造函数的自引用?

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的构造函数?

Edw*_*uck 8

要非常小心,因为在构建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)


Ama*_*dan 5

我会问自己:你确定那是你想要的设计吗?而且,如果是,那么其中一个类是否是另一个类的内部类是否有意义?