克隆对象

时间:2011-08-30 19:11:07

标签: java object clone

为了制作一个对象的副本并访问其数据,有什么更好的,为什么?

1。创建一个新对象并使用您想要的数据对其进行初始化     通过构造函数克隆

 HashSet<String> myClone = new HashSet<String>(data);

2。按原样克隆对象并将其强制转换为您认为的类型

 HashSet<String> myClone = (HashSet<String>) data.clone();

3 个答案:

答案 0 :(得分:2)

绝对使用复制构造函数 - clone()确实非常破碎(至少大多数人同意这一点。)有关详细信息,请参阅here

答案 1 :(得分:1)

'这取决于'。并非所有类都具有复制构造函数。某些类定义clone(),其他类从Object继承。

如果您正在考虑如何在自己的类中实现复制语义,很多人建议不要克隆,但其他人建议使用它。第三种选择是执行工作的静态工厂方法。

如果您正在尝试复制某些现有类,那么您将受到现有实现的支配。也许它有clone()可以做你想要的,也许它没有。也许它有一个复制构造函数,也许它没有。

答案 2 :(得分:0)

克隆不复制数据,它复制引用(Shallow copy)。所以,如果你想做一个深层的“复制”并且它与第一个独立,你将不得不做一个“逐项克隆”,通常称为deep copy(有几种方法可以完成这个)。

此外,您可以查看实现该HashSet的类的clone()方法。如果该类已覆盖该方法,则它可能会执行深层复制。我推荐你这本书:http://www.horstmann.com/corejava.html