在 Java 中實現對象的深拷貝通常有以下幾種方式:
import java.io.*;
public class DeepCopyExample {
public static <T> T deepCopy(T obj) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.close();
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
T copy = (T) ois.readObject();
ois.close();
return copy;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
// 示例:深拷貝一個對象
MyClass obj1 = new MyClass();
MyClass obj2 = deepCopy(obj1);
}
}
public class MyClass implements Cloneable {
private int value;
private MyOtherClass other;
// 重寫 clone() 方法
@Override
public MyClass clone() {
try {
MyClass copy = (MyClass) super.clone();
copy.other = this.other.clone(); // 對引用類型成員變量進行深拷貝
return copy;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
public class MyOtherClass implements Cloneable {
// 其他類的克隆方法同樣需要對引用類型成員變量進行深拷貝
@Override
public MyOtherClass clone() {
try {
return (MyOtherClass) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
以上是兩種常見的實現對象深拷貝的方式,選擇合適的方式取決于具體的需求和對象結構。