在 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;
}
}
}
以上是两种常见的实现对象深拷贝的方式,选择合适的方式取决于具体的需求和对象结构。