java-深拷贝实现
实现 cloneable 接口
实现 Cloneable 接口,然后递归调用 super.clone() 方法 进行基本类型的拷贝
通过序列化和反序列化实现深拷贝
对象必须实现 Serializable 接口
public class DeepCopy {
/**
* Returns a copy of the object, or null if the object cannot
* be serialized.
* @param orig an <code>Object</code> value
* @return a deep copy of that Object
* @exception NotSerializableException if an error occurs
*/
public static Object copy(Object orig) throws NotSerializableException {
Object obj = null;
try {
// Write the object out to a byte array
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(orig);
out.flush();
out.close();
// Make an input stream from the byte array and read
// a copy of the object back in.
ObjectInputStream in = new ObjectInputStream(
new ByteArrayInputStream(bos.toByteArray()));
obj = in.readObject();
} catch (NotSerializableException e) {
throw e;
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
return obj;
}
}
也可以使用 hutools 中的 ObjectUtil 中方法