需要特别注意的是,clone()方法只支持浅拷贝,因此若需要深拷贝,需要手动实现对每个子对象的克隆。 classPersonimplementsCloneable{privateStringname;privateAddressaddress;// 构造函数和 getter、setter 同上@OverrideprotectedObjectclone()throwsCloneNotSupportedException{Personcloned=(Person)super.clone();cloned.address=...
classPersonimplementsCloneable{Stringname;intage;publicPerson(Stringname,intage){this.name=name;this.age=age;}@OverrideprotectedObjectclone()throwsCloneNotSupportedException{returnsuper.clone();}} 这个类使用了Object的默认clone方法,也就是浅拷贝。在调用这个类的clone方法时,仅仅会浅拷贝出一个新的Person对象,...
* 深拷贝 */publicclassDeepCopyUtilimplementsSerializable{publicstatic<TextendsSerializable>TdeepCopy(Tobject){try{ByteArrayOutputStream baos=newByteArrayOutputStream();ObjectOutputStream oos=newObjectOutputStream(baos);oos.writeObject(object);ByteArrayInputStream bais=newByteArrayInputStream(baos.toByteArray...
Object 类提供的 clone 是只能实现 浅拷贝的。 回到顶部(go to top) 如何实现深拷贝? 深拷贝的原理我们知道了,就是要让原始对象和克隆之后的对象所具有的引用类型属性不是指向同一块堆内存,这里有三种实现思路。 ①、让每个引用类型属性内部都重写clone() 方法 既然引用类型不能实现深拷贝,那么我们将每个引用类型...
public Object deepClone() { //写入对象 ByteArrayOutoutStream bo=new ByteArrayOutputStream(); ObjectOutputStream oo=new ObjectOutputStream(bo); oo.writeObject(this); //读取对象 ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray()); ...
② 覆盖clone()方法,可见性提升为public。 @Data publicclassPersonimplementsCloneable { private String name; private Integer age; private Address address; @Override protected Objectclone()throws CloneNotSupportedException { returnsuper.clone(); }
在Java的Object类中,有一个方法名为clone(),直译过来就是克隆,核心概念就是复制对象并返回一个新的对象。 代码语言:javascript 代码运行次数:0 protectednative Objectclone()throws CloneNotSupportedException; 二、如何进行对象克隆? (1)在要实现克隆的对象类中实现Cloneable接口。
MyObject clone = (MyObject) obj.clone(); 需要注意的是,如果原对象的类没有实现Cloneable接口,那么调用clone()方法会抛出CloneNotSupportedException异常。因此,如果需要实现浅克隆,需要在类定义中实现Cloneable接口。深度克隆(Deep Clone):深度克隆是指创建一个新的对象,并将原对象的所有字段值复制到新对象中,包括...
}publicObjectclone()throwsCloneNotSupportedException{DeepClonecloned=(DeepClone)super.clone(); cloned.reference = (ReferenceType) reference.clone();returncloned; } } 复制代码 使用第三方库:可以使用一些第三方库,如Apache Commons Lang的SerializationUtils类,通过其clone()方法实现深度克隆。
import java.io.*; public class MyClass implements Serializable { private int value; private MyClass reference; public MyClass deepCopy() { try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); ByteArrayInputStream bis = new ByteArra...