我想创建多个父项,每个父项包含多个子项。 问题是我想为每组孩子只有一个父母,每个孩子必须知道他们的父母,反之亦然。一组子项共享父项的一个实例 - 它是方法和变量。因此,如果其中一个孩子改变了父变量,那么所有剩下的孩子都会得到相同的结果。
观
http://oi57.tinypic.com/6ohh7n.jpg
我尝试了什么
//reference injection
class Parent{
public Parent(){
children = new Child[10];
for(int i = 0; i < children.length; i++){
children[i] = new Child(this);
}
}
Child[] children;
}
class Child{
public Child(Parent parent){
this.parent = parent;
}
private Parent parent;
public Parent getParent(){return parent;}
}
Parent parent = new Parent();
Child child1 = new Child(parent);
Child child2 = new Child(parent);
Child child3 = new Child(parent);
但这感觉不太稳定,因为我必须在构造函数中传递 this ,这感觉不是一个好方法。
这样做的最佳方法是什么?
非常感谢。
答案 0 :(得分:1)
&#34;最佳&#34; Stack Overflow的问题通常是偏离主题的,但是对于它的价值,你所展示代码的方法是完全正常的,这是执行此操作的标准方法。为了让孩子知道他们的父母是谁,你必须告诉他们他们的父母是谁。因此,在某个阶段向他们传递对父母的引用是您最有可能做到这一点的方式。如果您在父实例方法中创建子项,则传递this
非常合适。
单独:
因此,如果其中一个孩子改变父变量......
如果父母中的孩子数量可能不同,则数组可能不是存储它们的最佳方式。其中一个List
实施(ArrayList
,LinkedList
等等更为典型。