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

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

我想知道是否有一种在java中进行深度克隆/复制实例的推荐方法。

我有三个解决方案,但我可能会错过一些,我想听听你的意见。

编辑:包括Bohzo提议和精炼问题:它更多的是关于深度克隆而不是浅克隆。

自己动手:

在属性之后用手工属性对克隆进行编码,并检查是否也克隆了可变实例。
专业:
-对将要执行的工作的控制
-快速处决
缺点:
-编写和维护繁琐
-易出错(复制/粘贴失败,丢失属性,可重分配的可变属性)

使用反射:

使用您自己的反射工具或外部助手(如JakartaCommon-bean),很容易编写一个泛型复制方法,它将在一行中完成任务。
专业:
-易于书写
-无维护
缺点:
-减少对发生情况的控制
-如果反射工具也不克隆子对象,则容易出现易变对象的错误
-执行较慢

使用克隆框架:

使用一个为您服务的框架,比如:
Common-lang序列化Utils
Java深度克隆库
杜泽尔
克里奥

专业:
-与反思相同
-更多地控制将被克隆的东西。
缺点:
-每个可变实例都是完全克隆的,即使在层次结构的末尾也是如此。
-执行起来可能会很慢

使用字节码工具在运行时编写克隆

javassitBCELCglib可能被用来像一只手一样快速地生成一个专用的克隆人。有人知道用这些工具中的一个实现这个目的库吗?

我错过了什么?
你推荐哪一个?

谢谢。


哆啦的时光机
浏览 743回答 3
3回答

Cats萌萌

自2.07版以来Kryo支持浅/深克隆:Kryo kryo = new Kryo();SomeClass someObject = ...SomeClass copy1 = kryo.copy(someObject);SomeClass copy2 = kryo.copyShallow(someObject);Kryo是快速的,在他们的页面上,你可以找到一份在生产中使用它的公司名单。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java