我想知道是否有推荐的方法可以在Java中进行实例的深层克隆/复制。
我有3个解决方案,但我可能会想念一些,我想征求您的意见
编辑:包括Bohzo命题,并提炼问题:更多是关于深克隆而不是浅克隆。
自己做:
在属性之后手动编写克隆代码,并检查是否也克隆了可变实例。
优点:
-控制要执行的操作
-快速执行
缺点:
-繁琐的编写和维护
-容易出错(复制/粘贴失败,缺少属性,重新分配的可变属性)
使用反射:
使用您自己的反射工具或外部帮助程序(例如jakarta common-beans),可以很容易地编写一个通用的复制方法,该方法可以在一行中完成此工作。
优点:
-易于编写
-无需维护,
缺点:
-对发生的事情的控制较少
-如果反射工具也不能克隆子对象,则易发生对象易变的错误
-执行速度较慢
使用克隆框架:
使用适合您的框架,例如:
commons-lang SerializationUtils
Java深度克隆库
Dozer
Kryo
优点:
-与反射相同
-可以精确控制要克隆的内容。
缺点:
-每个可变实例都被完全克隆,即使在层次结构的末尾
-可能执行起来很慢
使用字节码检测在运行时编写克隆
可以使用javassit,BCEL或cglib尽快生成专用克隆。有人知道为此目的使用这些工具之一的库吗?
我在这里错过了什么?
您会推荐哪一个?
谢谢。