java对象深度clone高效方法——利用序列化和反序列化实现深克隆
这篇文章讲的很好:
https://cloud.tencent.com/developer/article/1384236
文章里讲得很好,这里单独把利用序列化和反序列化实现包含有嵌套类的情况的深度克隆方法,拿出来特别讲解一下,这个方法非常好用。话不多说,上代码。
譬如有多层的类如下:
public class student{
school xx;
}
class school{
String xxx;
Association xxx;
}
class Association{
String xxx;
int xxx;
}
当我们需要深度克隆student对象、也就是要返回一个完全一模一样、只有地址不同的student对象时候,使用反序列化的方法更简单:
只需要在student类中实现接口 implements Serializable、并添加一个myClone方法即可。
注意!所有与student相关的类都要声明implements Serializable,不写方法实现都行,不然会报错。
public class student implements Serializable{//注意implements Serializable
school xx;
public student myClone(){
carDetailInfo c1 = null;
try {
//将对象序列化到流里
ByteArrayOutputStream os = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(this);
//将流反序列化成对象
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
ObjectInputStream ois = new ObjectInputStream(is);
newStudent = (student) ois.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return newStudent;
}
}
class school implements Serializable{//注意implements Serializable
String xxx;
Association xxx;
}
class Association implements Serializable{//注意implements Serializable
String xxx;
int xxx;
}
这样就可以实现student的深度克隆功能了,超级好用,强烈推荐~