![]() |
1
148
对于深度克隆(克隆整个对象层次结构):
对于浅克隆(仅克隆第一级属性):
我故意省略了“自己动手”选项-上面的API提供了对克隆内容和不克隆内容的良好控制(例如使用
|
![]() |
2
35
乔舒亚·布洛克的书有一整章题为 "Item 10: Override Clone Judiciously" 在其中,他为什么要强调克隆是一个坏主意,因为它的Java规范产生了很多问题。 他提供了几个备选方案:
Java中的所有集合类都支持复制构造函数(例如新的ARARYLIST(L)); |
![]() |
3
8
自2.07版起 Kryo supports shallow/deep cloning 以下内容:
KRYO速度很快,在他们的页面和你可以找到一个在生产中使用它的公司的列表。 |
![]() |
4
5
在内存中使用xstream toxml/fromxml。速度非常快,已经存在很长时间了,而且正在变得强大。对象不需要序列化,也不需要使用反射(尽管XStream需要)。XStream可以识别指向同一对象的变量,而不会意外地生成实例的两个完整副本。这些年来,许多类似的细节都被敲定了。我已经用了很多年了,这是一种尝试。它的使用方法和你想象的一样简单。
或
克隆,
更简洁地说:
|
![]() |
5
2
视情况而定。 对于速度,使用DIY。 为了防弹,使用反射。 顺便说一句,序列化与refl不同,因为有些对象可能提供重写的序列化方法(readobject/writeobject),它们可能有问题。 |
![]() |
6
1
我建议使用DIY方法,结合好的hashcode()和equals()方法,在单元测试中应该很容易证明这一点。 |
![]() |
7
1
我建议重写object.clone(),首先调用super.clone(),然后对所有要深度复制的引用调用ref=ref.clone()。差不多吧 自己动手 但需要更少的编码。 |
![]() |
8
1
对于复杂的对象,当性能不重要时,我使用 gson 要将对象序列化为JSON文本,然后反序列化文本以获取新对象。
基于反射的GSON在大多数情况下都可以工作,除了
|