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
。我该如何解决这个问题?
答案 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的实例。创建...