我想知道是否有一种推荐的方法可以在 java 中进行深度克隆/拷贝实例。
我心中有三个解决方案,但我可能会错过一些,我想听听你的意见
编辑: 包括 Bohzo 的建议和提炼问题: 它更多的是关于深度克隆而不是浅度克隆。
在属性之后用手工属性编写克隆代码,并检查是否也克隆了可变实例。
支持:
控制什么将被执行
快速处决
缺点:
写作和维护都很乏味
- 容易出错(复制/粘贴失败,缺少属性,重新分配可变属性)
使用您自己的反射工具或外部助手(如 jakartacommon-beans) ,可以很容易地编写一个通用的复制方法,该方法将在一行中完成这项工作。
支持:
很好写
不需要维护
缺点:
更少的控制发生了什么
- 如果反射工具没有克隆子对象,就容易出现可变对象的 bug
缓慢的执行
使用一个框架为你做到这一点,比如:
Commons-lang 序列化实用程序
深度克隆文库
道瑟
克里奥
支持:
和反射一样
更多的控制什么将被克隆。
缺点:
- 每个可变实例都被完全克隆,即使在层次结构的末尾
可能执行起来很慢
Javassit 、 BCEL或 Cglib可以用来生成一个专用的克隆程序,速度和单手写的一样快。有人知道一个 lib 使用这些工具来达到这个目的?
我错过了什么?
你推荐哪一个?
谢谢。