java怎么实现深拷贝

avatar
作者
猴君
阅读量:1

在Java中实现深拷贝的方法有几种:

  1. 通过实现Cloneable接口,并重写clone()方法来实现深拷贝。在clone()方法中,先调用super.clone()来实现对象的浅拷贝,然后对于需要深拷贝的成员变量,再进行单独的拷贝操作。
public class MyClass implements Cloneable {     private int value;     private MyObject obj;      public MyClass(int value, MyObject obj) {         this.value = value;         this.obj = obj;     }      @Override     protected Object clone() throws CloneNotSupportedException {         MyClass copy = (MyClass) super.clone();         copy.obj = (MyObject) obj.clone();         return copy;     } } 
  1. 通过实现Serializable接口,将对象序列化到字节流中,然后再从字节流中反序列化得到一个新的对象。
import java.io.*;  public class MyClass implements Serializable {     private int value;     private MyObject obj;      public MyClass(int value, MyObject obj) {         this.value = value;         this.obj = obj;     }      public MyClass deepCopy() throws IOException, ClassNotFoundException {         ByteArrayOutputStream baos = new ByteArrayOutputStream();         ObjectOutputStream oos = new ObjectOutputStream(baos);         oos.writeObject(this);          ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());         ObjectInputStream ois = new ObjectInputStream(bais);         return (MyClass) ois.readObject();     } } 
  1. 使用第三方库,例如Apache Commons Lang库的SerializationUtils类提供了一个方便的方法来实现深拷贝。
import org.apache.commons.lang3.SerializationUtils;  public class MyClass {     private int value;     private MyObject obj;      public MyClass(int value, MyObject obj) {         this.value = value;         this.obj = obj;     }      public MyClass deepCopy() {         return SerializationUtils.clone(this);     } } 

无论使用哪种方法,都需要确保所有需要拷贝的成员变量都是可序列化的或实现了Cloneable接口,并在拷贝过程中进行适当的处理。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!