【发布时间】:2015-05-16 20:46:30
【问题描述】:
我有一个 POJO 类,它包含字符串字段和一个 Map。 我阅读了关于克隆对象的 Joshua Bloch Effective Java 片段,但我认为这个案例并不是那么简单。 我有几个 POJO,我想使用 Copy Constructor 方法克隆它们,但我不知道如何克隆作为值具有对象的映射?
我知道这个 Object 可能是一个简单的不可变对象,例如一个 String 类,但有时它可能是一个完全不同的 POJO,甚至是列表或映射。我认为它可能起作用的唯一方法是使用 instanceof 在构造函数中进行一些检查,但这很丑陋(我必须检查 List、Map 和每个 POJO 对吗?)。
也许我应该改变实现 Cloneable 接口的方法?
我还看到了一个带有序列化的克隆方法,但我认为这也是一个丑陋的解决方案,并且它的性能会最差,例如使用 Copy Constructor 方法时。
你能给我一个建议,我应该如何克隆我的 POJO?
【问题讨论】:
-
为什么首先要克隆它们?特别是如果你甚至不知道它们是什么类型的。无论如何你都无法修改它们,因为你甚至不知道它们的类型。
-
18 年来我从未在生产代码中使用过
clone()。 -
为什么?因为我有一个 POJO“A”,它有一个具有不同属性的 POJO“B”列表,我想要完全不同的对象,一个新副本。我只需要它,因为我想创建几个 pojo "A" 的实例。那些 POJO“A”在 POJO“B”中应该有不同的值,如果 POJO“A”将引用相同的“B”POJO,那么我将无法在不同的 POJO“A”中设置不同的值
标签: java copy copy-constructor deep-copy