java-深拷贝实现
深拷贝是指在拷贝对象时,将对象的所有属性也进行拷贝,而不是仅仅拷贝对象的引用。
在 Java 中,实现深拷贝有以下几种方式:
- 实现 Cloneable 接口并重写 clone() 方法
public class Person implements Cloneable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public Object clone() throws CloneNotSupportedException {
Person cloned = (Person) super.clone();
return cloned;
}
}
在上述代码中,我们实现了 Cloneable 接口,并重写了 clone() 方法。在 clone() 方法中,我们首先调用了父类的 clone() 方法,然后对拷贝出来的实例进行属性赋值操作。这样就实现了 Person 对象的深拷贝。
- 使用序列化与反序列化实现深拷贝
public class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person deepClone() throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (Person) ois.readObject();
}
}
在上述代码中,我们实现了序列化与反序列化,通过将对象写入字节流,再将字节流读出为对象,实现了 Person 对象的深拷贝。
- 使用第三方库实现深拷贝
在 Java 中,也有一些第三方库能够实现深拷贝。比如:Apache Commons 中的 SerializationUtils、Spring Framework 中的 BeanUtils 等。这些库都提供了深拷贝的实现方式,可以根据实际需求选择使用。
总之,实现深拷贝的方式有很多种,我们需要根据实际需求选择最适合自己的方式。
原文地址: https://www.cveoy.top/t/topic/qMn 著作权归作者所有。请勿转载和采集!