序列化实现对象的拷贝
前言
提到拷贝,大家第一时间想到的可能都是克隆模式的深克隆,因为这个模式在面试中出现的机率非常高,同时实现的方式也比较容易:对象的类实现Cloneable接口并且重写clone()方法即可。但是在实际情况中克隆模式有时候其实并不适合用来拷贝对象,因为如果有很多的实体类都需要拷贝,这个时候难道把这些实体类全都实现克隆模式?这是不提倡的,这个时候可以使用序列化方式来实现对象的拷贝。
代码实现
需要拷贝的类必须实现序列化Serializable
package org.utils; import lombok.Getter; import lombok.Setter; import lombok.SneakyThrows; import java.io.*; /** * 通过序列化方式实现clone * copyFrom需要实现Serializable */ public class CloneUtil { @SneakyThrows public static <T extends Serializable> T clone(T copyFrom) { T cloneObj = null; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(copyFrom); objectOutputStream.close(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); cloneObj = (T) objectInputStream.readObject(); objectInputStream.close(); return cloneObj; } public static void main(String[] args) { User user = new User(); user.setAge(30); user.setName("李四"); User cloneUser = CloneUtil.clone(user); System.out.println(cloneUser.toString()); } @Getter @Setter public static class User implements Serializable { { name = "张三"; age = 20; location = "xxx"; } private String name; private Integer age; private String location; @Override public String toString() { return "name:" + name + ",age:" + age + ",location:" + location; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix