问题标签 [cloneable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
108 浏览

java - 克隆需要明确:对象的浅拷贝不仅仅是将对象引用变量分配给另一个变量,还是这样?

我问了一个关于在 java 中克隆的问题,得到的答案是深拷贝创建了一个对象的新实例,该实例在成员变量中携带相同的状态和数据。有人告诉我浅拷贝只是将对象引用分配给另一个引用变量。但这不是复制那个分配(为对象位置创建一个新指针)。

如果您尝试克隆的对象中包含引用变量,那么什么是对象的深度复制?会使用myObj2 = myObj.clone()克隆对象中的所有组件吗?假设 myObj 包含指向其他对象位置的其他引用变量,这些引用变量也会被克隆吗?所以 myObj2 的内部引用变量不会指向与 myObj 中的指针指向的旧对象位置相同的旧对象位置。我需要在这里清楚地了解克隆的全部内容。

先感谢您。

0 投票
1 回答
76 浏览

c# - 关于克隆包含可克隆对象的数组的说明是必需的

我正在尝试以下代码:

当我按照代码中的指定修改 strValuArrayClone 对象时,即使我正在创建克隆,此更改也会反映在 strValueArray 对象中。但是,如果尝试下面的代码,那么一切都会顺利进行。我想了解它背后的逻辑。

0 投票
1 回答
274 浏览

java - 哪个类抛出 CloneNotSupportedException?或者在哪里检查 instanceof Cloneable?

为了克隆一个类的对象,我们实现了 Cloneable 接口,并重写了 clone 方法:

上面的 super.clone() 调用了 Object 的原生 API clone()。

在 Serializable 的情况下,instanceof 检查在 ObjectOutputStream 类中完成。同样,我试图找出编译器在哪里检查对象是否是可克隆的实例?检查是否在本地执行?

0 投票
1 回答
66 浏览

java - “clone()”导致 Java 桌面应用程序性能下降

我正在制作一个 3D OpenGL LWJGL 游戏,我已经用它的通用版本替换了一个用于 3D 浮点向量的类,并从“Cloneable”实现了“clone()”方法。之后,性能显着下降(GC 使用率从低于 1% 下降到 10%)。这是更改前后矢量版的代码示例:

前:

后:

但这根本没有意义,因为代码实际上做了完全相同的事情。

0 投票
1 回答
3448 浏览

java - 实现可克隆接口

请注意: 我之前创建了一个帖子,其中包含这个问题以及其他几个问题,但被告知由于我在同一个帖子中问了这么多问题,最好将其分解为单独的问题。所以请不要将此标记为重复,是的,说明是相同的,是的,正在使用相同的代码,但问题本身是不同的。谢谢。

我正在使用以下说明开发一个程序:

编写一个名为 Octagon 的类,它扩展 GeometricObject 并实现 Comparable 和 Cloneable 接口。假设八边形的所有 8 个边的大小相等。面积可以使用以下公式计算

编写一个程序(驱动程序)从文件中读取一系列值,显示面积和周长,创建一个克隆并比较对象及其克隆(基于面积)。此外,您的程序应该将当前对象(刚刚读入)与读入的第一个对象进行比较。当从文件中读取一个负数时,程序结束。

这是我到目前为止的代码,这是我的 GeometricObject 类:

我的八角班:

还有我的 Driver 或 tester 类:(这是我最需要帮助的地方):

这是用于获取输入的文件。每行是一个八边形:

我很难弄清楚我将如何实现可克隆接口,以便当我打印出结果时,他们会说克隆比较:相等(或不相等)。

非常感谢任何输入。

0 投票
1 回答
873 浏览

java - clone() 方法的打印结果

请注意:我之前创建了一个帖子,其中包含这个问题以及其他几个问题,但被告知由于我在同一个帖子中问了这么多问题,最好将其分解为单独的问题。所以请不要将此标记为重复,是的,说明是相同的,是的,正在使用相同的代码,但问题本身是不同的。谢谢。

我正在使用以下说明开发一个程序:

编写一个名为 Octagon 的类,它扩展 GeometricObject 并实现 Comparable 和 Cloneable 接口。假设八边形的所有 8 个边的大小相等。面积可以使用以下公式计算

面积 = (2 + 4/2 的平方根) * 边 * 边

编写一个程序(驱动程序)从文件中读取一系列值,显示面积和周长,创建一个克隆并比较对象及其克隆(基于面积)。此外,您的程序应该将当前对象(刚刚读入)与读入的第一个对象进行比较。当从文件中读取一个负数时,程序结束。

这是我到目前为止的代码,这是我的 GeometricObject 类:

我的八角班:

还有我的 Driver 或 tester 类:(这是我最需要帮助的地方):

这是用于获取输入的文件。每行是一个八边形:

程序正在正确地比较原始对象和它的克隆,但是,我无法让它以我想要的方式打印。

由于上面的代码是写的,这是我的输出:

但我需要它看起来像这样:

我觉得这可能是我的 Octagon 类中的 toString() 方法有问题,因为这是我从中打印 getArea() 和 getPerimeter() 的地方,但我无法在该返回语句中使用 cloneComparison 编译它。

我用 toString() 方法的 return 语句尝试过的一些事情包括:

非常感谢任何输入。

0 投票
3 回答
9771 浏览

java - 为什么 Cloneable 没有被弃用?

众所周知,CloneableJava 中的接口已损坏。原因有很多,我就不说了;其他人已经这样做了。这也是Java架构师自己的立场。

因此,我的问题是:为什么还没有被弃用?如果核心 Java 团队决定它被破坏了,那么他们一定也考虑过弃用。他们反对这样做的原因是什么(在 Java 8 中它仍然没有被弃用)?

0 投票
3 回答
1580 浏览

java - 可克隆的现代替代品?

众所周知,它Cloneable已无法修复(有关更多信息,请参阅此问题中的讨论)。

关于替代方案和“我如何正确地做”的最后一个问题是几年前的:

所以我想再问一遍:

什么是现代(2014 年)的替代品Cloneable

我正在寻找一个通用的解决方案。我可以想象以下要求:

  • Copyable类将实现的某种接口: A extends Copyable.
  • 深度复制。如果一个 istanceA引用了 的一个实例Ba.copy()则应该引用一个新的b.copy().
  • 复制到指定目标:a.copyTo(a1).
  • 多态复制:如果Bextends Athen应该复制from toa.copyTo(b)的所有属性。Bab

当然我可以自己实现所有这些,但是为此拥有标准接口不是很合理吗?还是我错过了什么?


我的上下文的一些背景。我经常使用 JAXB 和模式派生类。对这些类进行深度复制通常非常有用。几年前,我编写了几个 JAXB 模式编译器插件来生成copyTo实现上述(以及更多)要求的方法。我不得不使用我自己的运行时 API。现在我正在重新审视这个案例,并决定询问是否有标准解决方案。

0 投票
1 回答
156 浏览

java - Java 深拷贝 - 错误的引用分配

请考虑以下代码

我正在尝试实现我自己的具有Cloneable接口的 BST 树。我有问题的地方是

我假设没有正确设置对树的引用alfabeta. 为什么我会这么认为?看看以下

因此,您可以在克隆后看到任何删除 frombeta实际上都删除了 from alfa,而删除 fromalfa根本不会删除。当然,在调用clone()每个操作之前都可以alfa正常工作。

这是为了学习,主要任务是实现一个工作clone()方法,所以我不想使用任何其他方式来执行深度复制。

请告知我做错了什么,因为自我调试还没有帮助。

0 投票
2 回答
782 浏览

java - 实现 Cloneable 并声明 CloneNotSupportedException 但仍然得到 CloneNotSupportedException

我正在制作一个程序,该程序构造一个包含各种对象的集合。但是,当我尝试克隆集合时,我得到了 CloneNotSupportedException,尽管声明了 CloneNotSupportedException 并实现了 Cloneable 接口。

这是代码,

任何帮助,将不胜感激。