如何创建两个彼此引用的对象?

时间:2014-01-19 16:01:22

标签: 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。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

您的方法问题在于,当您创建A的实例时,此实例必须创建B的实例,该实例还必须创建A的实例,该实例创建{{1}的实例1}} ...等等,直到堆栈溢出。


可能最直观的方法是使用像

这样的getter / setter来解决这个问题
B

答案 1 :(得分:3)

如果你想让B对象持有对创建它的A对象的引用,你需要这样的东西:

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

class B {
    A a;

    public B(A a) {
        this.a = a;
    }

}

这不会产生StackOverflow而B会知道A和A会知道B.你正在做的是创建一个A的实例,它创建了一个B的实例,它创建了一个A的实例。创建...