java1.7-cloning对象和列表

zaq34kh6  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(400)

我试着克隆一个在他体内有一系列物体的物体。我想克隆整个对象,还有他的列表。
我解释自己:
我有这个:

public class MyObject implements Cloneable{
    private long a;
    private List<AnotherObject> listA;
    private List<AnotherObject> listB;

    //getter and setter methods;

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

我创建了他的一个示例:

MyObject original = new MyObject();

假设我们使用了这个对象,所以我们把列表加载到他里面。
现在,我想克隆它。
我这么做,觉得已经够了

MyObject clone = (MyObject) original.clone();

但是,在调试模式下检查原始对象和克隆对象时,我看到它们的列表引用相同的内存区域。
实际上,更改原始对象的lista元素这个修改在克隆对象中也是可见的!
为了解决这个问题,我做了:

clone.setListA(new ArrayList<AnotherObject>(original.getListA());

这是个好办法?

dphi5xsq

dphi5xsq1#

java中有两种类型的克隆:浅层克隆和深层克隆。这个是浅克隆。
请参阅下面介绍如何实现深度克隆的文章:http://www.jusfortechies.com/java/core-java/deepcopy_and_shallowcopy.php

e7arh2l6

e7arh2l62#

可能您最好在myobject#clone()方法中实现深度克隆,或者您可以使用一些深度克隆库,例如,there is cloning and kryo。

相关问题