我有两个班,A班和B班。
A类有一个对象Class B的ArrayList。
每个B类对象都有一个存储A类对象的属性。
因此,当我创建一个Class A对象时,它会填充对象Class B的ArrayList。每个对象Class B创建一个对象Class A(与正在填充的对象相同),它创建一个对象Class B的ArrayList。 ..等等。
我该怎么做才能避免这种无限递归?
答案 0 :(得分:1)
这应该可以修复无限递归:(Java假设)
Class A {
private ArrayList<B> list = new ArrayList<B>();
A(){
while(someCondition) {
list.add(new B(this));
}
}
}
Class B {
private A attribute;
B(A inRef){
attribute = inRef;
}
}
请注意,B
的{{1}}字段未使用attribute
分配,而是通过引用new
。通过不使用A
,我们不会创建new
类的新实例并避免递归。
答案 1 :(得分:0)
我认为,你误解了类(作为类型)和对象之间的区别。
...So when I create a Class A object, it populates the ArrayList of objects Class B. Each object Class B creates an object Class A (same as the one that is being populated)...
- 不精确same
作为对象,但与类相同。每个对象B
都存储类A
的对象。
一旦创建了对象A
,可能就不像A->B->A
那样对象。
但是如果你想从对象A
引用父对象B
,你可以使用引用(例如。你想使用它的公共方法等)。因此,在这种情况下,您不能在A
中创建对象B
的新实体,但是,当您创建对象B
时 - 在B
的构造函数中,您必须使用as对父对象A
的参数引用。
在C ++中,这个技巧很常见。