java - 如何将自引用传递给 java 中的构造函数?

标签 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;
    }
}

好吧 - 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/

相关文章:

java - 如何用 Hibernate 对树建模?

java - Weblogic 托管服务器未正确记录错误

java - 使用 find-min/find-max 堆栈比 O(n) 更有效?

C++ 传递动态方法指针作为不同类的方法参数

reference - 删除的迁移文件 - Laravel

java - 在java中搜索文本文件中的单词

oop - MVC : Differences Between Two-Step and Composite View Patterns

c++ - 组合中的松散耦合

c++ - C++ 中的 int &r=x 和 r=y 有什么区别?

mysql - 无法解析接近于的表名