在Java中克隆对象需要什么

在Java中克隆对象需要什么,java,clone,Java,Clone,我在读Java中的克隆,如何制作对象的浅/深拷贝等 我想知道为什么我需要在Java中创建对象克隆?任何实时示例都有助于理解。拥有某事物的克隆副本意味着您可以拥有“之前”和“之后”版本。当你用副本测试某件东西时,你可以把原件放在一边。您只需恢复到原始版本即可提供撤消功能。您可以使用对象的深度克隆副本,因为您可能需要在以后使用的某些方法中获得部分结果。您经常希望使用不可变对象,在这种情况下,克隆是代码的重要部分。例如,如果您有一个具有列表或数组类型字段的不可变对象,那么getter应该始终返回列表或

我在读Java中的克隆,如何制作对象的浅/深拷贝等


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

拥有某事物的克隆副本意味着您可以拥有“之前”和“之后”版本。当你用副本测试某件东西时,你可以把原件放在一边。您只需恢复到原始版本即可提供撤消功能。

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

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


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

为了帮助保留封装(从而使代码更健壮),您可以在从getter返回对象之前克隆对象。例如,getDate方法可能在返回调用方之前克隆日期字段。

克隆的一个具体示例是:

正如克隆本身所说的复制某物,所以在java中,当我们说克隆对象时,它意味着创建或拥有另一个与现有对象相同的对象

我们什么时候做克隆?当我们看到每次创建新对象都很耗时,或者我们需要具有相同或微小差异的新对象时,我们使用克隆

在java中,克隆有三种类型

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

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

深度复制

在深度复制中,将创建两个单独的对象,并在深度复制中创建。在这种情况下,一个对象的每个字段都复制到另一个对象

现在,在java中克服这个困难的第三类是克隆的概念

java中的克隆是通过实现可克隆接口来完成的。可克隆是标记接口


有关克隆的更多深入知识,请参阅:

可能重复的。。。或者。。。数十人。在提出新问题之前,请使用搜索功能;很多问题都被问到了,回答了。嗨,布莱恩。我确实搜索过了,但在大多数帖子中,只给出了浅拷贝和深拷贝的实现或区别。我知道浅层/深层克隆。我只是想知道在Java中克隆对象的原因?正如您所说,将列表作为不可变对象的字段,我必须在getter中返回该列表的克隆,但我可以使用“new”创建一个新列表,然后返回它。列表接口也没有克隆方法,只有实现类有克隆方法。我为什么要使用克隆?@anand我的意思是克隆作为一种操作。克隆的一种方法实际上是使用复制构造函数。另一个是实现
clone()
方法。如何实现克隆并不重要,一种方法和另一种方法一样好。正如你所说,我可以在返回之前克隆一个日期字段,但我也可以创建一个新的日期对象。我为什么要在这里使用克隆?我理解。但是,如果你能让我知道任何我必须离开原始对象并使用对象副本进行测试的真实情况,这会让我更清楚。我认为@biziclop建议了一个场景,你想测试副本。也就是说,您希望测试复制是否成功,可能是在事务中。如果副本由于验证问题或数据库事务失败而失败,您可以放弃它并恢复到原始副本,而无需重新创建。是的,我得到了它。还有一件事,我读到我们在初始化一个对象时克隆一个对象太贵了,因此,我们不需要创建一个新的对象,而是可以克隆一个现有的对象,并且只更改对我们的新实例有影响的属性。你能解释一下吗?