Spring Boot 深拷贝对象

2018-10-02  本文已影响0人  一杉风雨

背景

Java Class类的clone()方法默认为浅拷贝模式,只能实现Java基础类型的按值拷贝操作,对对象拷贝时默认为按址拷贝。这里采用对一个对象进行序列化和反序列化的方式来实现对象的深拷贝操作。

内容

  1. 工具类 CopyUtil.java
/**
 * 通过序列化方式实现深拷贝, 被拷贝对象以及其内容, 需要实现Serializable接口
 */
class CopyUtils {
    ppublic static<T> T deepClone(T src) throws IOException, ClassNotFoundException {
        Object obj = null;
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStream.writeObject(src);
        objectOutputStream.close();
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
        ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
        obj = objectInputStream.readObject();
        objectInputStream.close();
        return (T) obj;
    }
}
  1. 使用
Object objNew = CopyUtils.deepClone(objOld);
上一篇 下一篇

猜你喜欢

热点阅读