注意:我查看了包括stackoverflow在内的不同位置,但尚未找到解决方案.
问题:
class Animal{
AnimalGroup animalGroup;
}
class AnimalGroup{
List animalList;
}
class MainProgram{
// Map
Map rankedAnimalGroups;
}
注意:很明显,一个动物只能属于一个动物组.
我要深复制地图上的排名动物组.
案例1:克隆
我将使Animal和AnimalGroup可克隆.
AnimalGroup中的克隆方法
protected Object clone() throws CloneNotSupportedException {
AnimalGroup clonedAnimalGroup = (AnimalGroup)super.clone();
for(Animal animal: animalList)
clonedAnimalGroup.addAnimal(animal.clone);
return clonedAnimalGroup;
}
动物克隆方法
protected Object clone() throws CloneNotSupportedException {
Animal clonedAnimal = (Animal)super.clone();
clonedAnimal.animalGroup = animalGroup.clone();
}
这将结束于AnimalGroup调用Animal的循环并反转.
案例2:copyConstructor
HashMap不支持深度复制构造函数
建议的解决方案
我可以在AnimalGroup的克隆方法中使用Animal的构造函数,如下所示
AnimalGroup中的克隆方法
protected Object clone() throws CloneNotSupportedException {
AnimalGroup clonedAnimalGroup = (AnimalGroup)super.clone();
for(Animal animal: animalList)
clonedAnimalGroup.addAnimal(new Animal(animal, this));
return clonedAnimalGroup;
}
动物的构造函数
public Animal(Animal other, AnimalGroup animalGroup)
{
this.animalGroup = animalGroup;
...
}
题
在这种情况下,是否有更好的解决方案来进行深层复制.
编辑1
数据大小太大,无法进行与序列化相关的方法.
编辑2
我不能在项目中包含要复制的外部库等