java - 如何创建两个相互引用的对象?

标签 java

class A {
    B ob1 = new B();
}

class B {
    A ob2 = new A();
}

class C {
    A a = new A();
   // I am getting a StackOverflowException here 
}

我在评论的行上收到了 StackOverflowException。我该如何解决这个问题?

最佳答案

您的方法存在的问题是,当您创建 A 的实例时,该实例必须创建 B 的实例,而 B 也必须创建 A< 的实例 创建 B 的实例...等等,直到堆栈溢出。


可能最直观的方法是用 getters/setters 来解决这个问题,比如

class A{
    private B b;
    public void setB(B b) { this.b = b; }
    public B getB() { return b; }
}

class B{
    private A a;
    public void setA(A a) { this.a = a; }
    public A getA() { return a; }
}

class Demo {
    public static void main(final String[] args) throws Exception {
        A a = new A();
        B b = new B();
        //let them see each other
        a.setB(b);
        b.setA(a);
    }
}

关于java - 如何创建两个相互引用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219094/

相关文章:

java - Java 中奇怪的不匹配数据类型

java - 从父级 JPA 获取所有子级和子级

java - BlueJ 中的常见错误,但尚未得到解决。与 括号相关

java - Documents4j 的 RemoteConverter 的自定义 HttpClient

java - JSP 全局脚本变量

java - 编译错误: Cannot find symbol - makeFrame();

Java OOP 序列化,文件未加载

java - 列表<?扩展基础> VS 列表<基础>

java - SWT TableViewer 单元格不显示图像,除非单击可编辑单元格

java - Spring:Spring Batch bean 的 DI 不起作用