当前位置: 首页 > 面试题库 >

关于Java中的可克隆接口和object.clone()的困惑

慎望
2023-03-14
问题内容

如果我有:

class foo implements Cloneable

然后html" target="_blank">执行:

bar = new foo();
bar.clone();

我得到了一个浅表副本,而无需编写任何bar.clone()代码,就像实现接口时通常需要做的那样。

我的理解是,接口的功能必须由实现它的类来填充,并且Object.clone()没有实现(根据文档,“类Object本身并不实现接口Cloneable”)

那么我的浅表克隆从哪里来?bar.clone()如果Object.clone()没有实现,实现的代码在哪里?我很困惑。


问题答案:

使用克隆时要 非常小心 。实际上,我会完全避免。我 从来 不需要它。但是…话说回来,我所读过的主题的最佳讨论是有效Java中的Joshua
Bloch。阅读项目11:“明智地覆盖克隆”。

请帮自己一个忙,阅读该项目。我实际上建议阅读整章(以及本书的其余部分)。您需要了解的有关克隆的所有信息以及为何要向我提出警告,因此您必须了解它。

希望这可以帮助。



 类似资料:
  • 问题内容: 我在Java中遇到一个小问题。我有一个名为Modifiable的界面。实现此接口的对象是可修改的。 我还有一个ModifyCommand类(具有Command模式),该类接收两个Modifiable对象(以在进一步的列表中交换它们- 这不是我的问题,我已经设计了该解决方案)。 ModifyCommand类从制作可修改对象的克隆开始。从逻辑上讲,我使我的Modifiable接口扩展了Cl

  • 问题内容: 我一直在寻找一些讲解Java的教程,但没有获得任何良好的链接,无论如何,Stack Overflow变得越来越明显。 我想知道以下内容: 意味着我们可以通过实现接口来获得对象的克隆或副本。这样做的优点和缺点是什么? 如果对象是复合对象,则如何进行递归克隆? 问题答案: 你应该了解的第一件事-不要使用它。 正确地进行克隆非常困难,而且付出的努力是不值得的。 而不是使用其他一些选项,例如或

  • 我们解决什么问题 我们知道,JDK中的Cloneable接口只是一个空接口,并没有定义成员,它存在的意义仅仅是指明一个类的实例化对象支持位复制(就是对象克隆),如果不实现这个类,调用对象的clone()方法就会抛出CloneNotSupportedException异常。而且,因为clone()方法在Object对象中,返回值也是Object对象,因此克隆后我们需要自己强转下类型。 泛型克隆接口

  • 问题内容: 在游戏中,我有一个玩家列表,我们这样说: 我想让每个玩家与其他玩家互动,所以我写了两个嵌套循环: 由于我只希望每对玩家互动一次,因此我想在外循环的当前玩家之后与该玩家开始内循环。所以我想克隆迭代器,但是不能编译。 那么,我该怎么办呢? 问题答案: 将执行以下操作: 它依靠的能力从给定位置开始,并且还知道其当前位置。

  • 问题内容: 我知道使用这种克隆机制并不是一个好主意(因为它被某些作者建议“破了”),尽管我需要帮助来理解它的工作原理。我们得到以下类层次结构: 既然扩展了,如何返回一个实例?实际上是返回对class对象的引用。为什么我们可以将其投射到?有不在班上的成员。默认行为实际上是如何设法自动克隆此变量的(因为该变量在class中没有记录)? 同样,M也是如此。在我们中,将一个对象从class (由返回)转换

  • 本文向大家介绍深入理解Java中的克隆,包括了深入理解Java中的克隆的使用技巧和注意事项,需要的朋友参考一下 前言 Java克隆(Clone)是Java语言的特性之一,但在实际中应用比较少见。但有时候用克隆会更方便更有效率。 对于克隆(Clone),Java有一些限制:       1、被克隆的类必须自己实现Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例