为了账号安全,请及时绑定邮箱和手机立即绑定

Java:深度克隆/复制实例的推荐解决方案

Java:深度克隆/复制实例的推荐解决方案

哆啦的时光机 2019-06-15 18:34:33
Java:深度克隆/复制实例的推荐解决方案我想知道是否有一种在java中进行深度克隆/复制实例的推荐方法。我有三个解决方案,但我可能会错过一些,我想听听你的意见。编辑:包括Bohzo提议和精炼问题:它更多的是关于深度克隆而不是浅克隆。自己动手:在属性之后用手工属性对克隆进行编码,并检查是否也克隆了可变实例。专业:-对将要执行的工作的控制-快速处决缺点:-编写和维护繁琐-易出错(复制/粘贴失败,丢失属性,可重分配的可变属性)使用反射:使用您自己的反射工具或外部助手(如JakartaCommon-bean),很容易编写一个泛型复制方法,它将在一行中完成任务。专业:-易于书写-无维护缺点:-减少对发生情况的控制-如果反射工具也不克隆子对象,则容易出现易变对象的错误-执行较慢使用克隆框架:使用一个为您服务的框架,比如:Common-lang序列化UtilsJava深度克隆库杜泽尔克里奥专业:-与反思相同-更多地控制将被克隆的东西。缺点:-每个可变实例都是完全克隆的,即使在层次结构的末尾也是如此。-执行起来可能会很慢使用字节码工具在运行时编写克隆javassit, BCEL或Cglib可能被用来像一只手一样快速地生成一个专用的克隆人。有人知道用这些工具中的一个实现这个目的库吗?我错过了什么?你推荐哪一个?谢谢。
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

自2.07版以来Kryo支持浅/深克隆:

Kryo kryo = new Kryo();SomeClass someObject = ...SomeClass copy1 = kryo.copy(someObject);SomeClass copy2 = kryo.copyShallow(someObject);

Kryo是快速的,在他们的页面上,你可以找到一份在生产中使用它的公司名单。


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 742 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信