java深拷贝如何执行_在这种情况下,如何进行Java深拷贝?

注意:我查看了包括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

我不能在项目中包含要复制的外部库等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值