我正在阅读有关Java中的克隆,如何制作对象的浅/深副本等。
我想知道为什么我需要在Java中创建对象克隆?任何实时的例子都有助于理解。
答案 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方法可能会在返回调用者之前克隆日期字段。