因为项目里面自定义的类里面嵌套太多复杂自定义对象,挨个实现clone接口太麻烦,还涉及到hasMap的深拷贝,
刚开始使用gson或者fastjson的序列化,反序列化的方式进行深拷贝,但是一直报错,
Gson报错:java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: ...TextView. Forgot to register a type adapter?
fastJson报错:JavaBean error
Google很久试了几个方法都没解决。
最后通过下面这个,直接通过输入输出流序列化的方式深拷贝的对象:
来源:https://www.jianshu.com/p/eb2113e12ecb
/**
* 对象深度复制(对象必须是实现了Serializable接口)
*/
@SuppressWarnings("unchecked")
public static <T extends Serializable> T clone(T obj) {
T clonedObj = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
clonedObj = (T) ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
return clonedObj;
}