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

关于Java克隆

水铭晨
2023-03-14
问题内容

我一直在寻找一些讲解Java的教程Cloneable,但没有获得任何良好的链接,无论如何,Stack Overflow变得越来越明显。

我想知道以下内容:

  1. Cloneable意味着我们可以通过实现Cloneable接口来获得对象的克隆或副本。这样做的优点和缺点是什么?
  2. 如果对象是复合对象,则如何进行递归克隆?

问题答案:

你应该了解的第一件事Cloneable-不要使用它。

Cloneable正确地进行克隆非常困难,而且付出的努力是不值得的。

而不是使用其他一些选项,例如apache-commons SerializationUtils(deep-clone)或BeanUtils(shallow-clone),或仅使用复制构造函数。

有关 Josh Bloch关于使用克隆的观点,请参见此处Cloneable,这解释了该方法的许多缺点。(Joshua Bloch是Sun的雇员,并领导了许多Java功能的开发。)



 类似资料:
  • 问题内容: 如果我有: 然后执行: 我得到了一个浅表副本,而无需编写任何代码,就像实现接口时通常需要做的那样。 我的理解是,接口的功能必须由实现它的类来填充,并且没有实现(根据文档,“类Object本身并不实现接口Cloneable”) 那么我的浅表克隆从哪里来?如果没有实现,实现的代码在哪里?我很困惑。 问题答案: 使用克隆时要 非常小心 。实际上,我会完全避免。我 从来 不需要它。但是…话说回

  • 过去几天我一直在使用java,最近几天我收到了一个问题表单。当我试图在servlet中创建一个类时,包部分显示以下错误"** > 无法解析ObjectInputStreamjava.io.类型。它是从必需的. class文件间接引用的 当我试着评论出 导入javax.servlet.http.HttpServlet; **"部分的错误是去,但我不能扩展的http的servlet类。 此图像显示错误

  • 我正在阅读关于线程的oracle java教程,我看到了这个示例 当有人可能使用这些方法签入他们的代码时?thread.interrupt(标志)是静态的,所以通过上面的检查,我们实际上检查是否有任何踏面被中断了?即使是这样,根据教程,当线程通过调用静态方法thread.interrupted检查中断时,中断状态将被清除。或任何通过抛出InterruptedException退出的方法在这样做时将

  • Java 插件添加 Java 编译和测试、捆绑的能力到项目中。这是许多其他 Gradle 插件的基础。 23.1. 用法 使用 Java 插件,添加如下脚本 Example 23.1. Using the Java plugin build.gradle apply plugin: 'java' 23.2. Source set Java 插件引入了 source set 概念。 source

  • 问题内容: 我想知道是否有任何方法可以执行以下操作。我有一个抽象类,及其所有不同的子类,我想覆盖clone方法。我要在方法中做的就是从当前方法中创建一个新方法。显然,由于抽象,我无法执行以下操作。还有另一种方法可以执行此操作,因为仅为了简单的名称更改而在每个子类中覆盖克隆似乎没有用。 问题答案: 您可以尝试使用反射: } 在clone()方法中,调用getClass()。因为ACloneble i

  • 问题内容: Java文档说“同一对象上的同步方法的两次调用不可能交错”。我需要知道的是,synchronized是否还会阻止 同一类的 两个不同 实例中的 同步方法交织。 例如,类Worker具有称为process()的方法。我们有几个在自己的线程中运行的Worker实例。我们希望防止多个实例同时运行process()方法。会 同步 吗? 谢谢。 问题答案: 没有; 仅防止多个线程在 同一 实例中