Java - 原型,深拷贝
Java - Prototype , making a deep copy
我想问一下,因为我在这方面还很陌生,这是制作文档对象深层副本的正确方法吗,我不知道我是否正确地实现了字段复制。
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;
}
}
你的对象只有原始类型和不可变字符串,所以 Document doc =(Document)super.clone();
就足够了,你不必单独赋值。
但这有点冒险,因为如果您向字段中添加一个可变对象,那么不单独复制该对象会导致问题。
已经有关于使用一些现有库进行深度复制的扩展讨论,例如:How do you make a deep copy of an object in Java?
我想问一下,因为我在这方面还很陌生,这是制作文档对象深层副本的正确方法吗,我不知道我是否正确地实现了字段复制。
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;
}
}
你的对象只有原始类型和不可变字符串,所以 Document doc =(Document)super.clone();
就足够了,你不必单独赋值。
但这有点冒险,因为如果您向字段中添加一个可变对象,那么不单独复制该对象会导致问题。
已经有关于使用一些现有库进行深度复制的扩展讨论,例如:How do you make a deep copy of an object in Java?