什么是在Java中克隆对象的需要

时间:2012-04-08 18:05:38

标签: java clone

我正在阅读有关Java中的克隆,如何制作对象的浅/深副本等。

我想知道为什么我需要在Java中创建对象克隆?任何实时的例子都有助于理解。

6 个答案:

答案 0 :(得分:8)

拥有克隆的东西副本意味着您可以拥有“之前”和“之后”版本。当您使用副本测试某些内容时,您可以单独保留原始内容。您只需恢复原始版本即可提供撤消。

答案 1 :(得分:2)

通常,您希望使用不可变对象,在这种情况下,克隆是代码的重要组成部分。例如,如果您有一个具有列表或数组类型字段的不可变对象,则getter应始终返回列表或数组的克隆以保留不变性。

另一个典型的用例是当你想要“事务”修改时,当你调用几个状态改变方法但只希望结果在所有方法都成功时可见。

答案 2 :(得分:2)

克隆的一个具体例子是: prototype design pattern

答案 3 :(得分:1)

因为克隆本身就说了某些东西的副本,所以在java中我们说克隆对象时意味着创建或拥有另一个相同的现有对象。

什么时候克隆?当我们看到每次创建新对象都很耗时,或者我们需要新对象具有相同或微小的差异时w.r.t所有现成的对象,然后我们使用克隆。

克隆在java中有3种类型

  • 浅拷贝
  • 深层复制
  • 克隆

浅拷贝

浅拷贝是将对象的状态复制到另一个对象的过程,但两个对象都指向堆区域中的相同引用。

深层复制

在Deep Copy中,创建了两个单独的对象并进行深层复制。在此,一个对象的每个字段都被复制到另一个对象。

现在克服这个难度的第三类是克隆的概念。

java中的

克隆由implements Cloneable接口完成。 Cloneable是标记界面。

有关克隆的更深入知识请参阅: Cloning in java

答案 4 :(得分:0)

您可以使用对象的深度克隆副本,因为您可能需要在稍后使用的某种方法中获得部分结果。

答案 5 :(得分:0)

作为一种帮助保护包容(并因此使代码更加健壮)的方法,您可以在从getter返回对象之前克隆对象。例如,getDate方法可能会在返回调用者之前克隆日期字段。