Java - 原型,如何制作深度拷贝

3

我想问一下,因为我还很新,这是制作文档对象的深层副本的正确方式吗?我不知道我是否正确地实现了字段的复制。

package model;

public class Document implements Cloneable {
    //fields
    private String author;
    private String date;
    private double versionID;
    private String contents;


    public Document(String author,String date,double versionID,String contents) {
         this.author=author;
         this.date=date;
         this.versionID=versionID;
         this.contents=contents;        
    }

    //getters-setters

    }
    //making the deep-copy clone all obj ref to Document
    @Override
    public Object clone() throws CloneNotSupportedException {
        Document doc =(Document)super.clone();
        doc.author=this.author;
        doc.date=this.date;
        doc.versionID=this.versionID;
        doc.contents=this.contents;

        return doc;
    }   

}

1
你可能想使用https://codereview.stackexchange.com/。 - MWB
正如《Effective Java》所述:“明智地覆盖克隆方法”。在大多数情况下,您应该使用标准的复制构造函数。 - Glains
1个回答

1
你的对象只有原始类型和不可变字符串,因此Document doc = (Document)super.clone();就足够了,你不必进行单独的赋值操作。 但这有一定风险,因为如果你将可变对象添加到字段中,不进行单独的对象复制将会导致问题。 已经有讨论扩展使用某些现有库来进行深度复制,例如在这里:如何在Java中制作对象的深层副本?

我明白了,我不认为我会添加任何东西。我只会使用那些字符串类型。那么我就这样留着吧,希望它不会给我带来任何麻烦。 - DavidDunn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接