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