问题标签 [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.
java - 克隆需要明确:对象的浅拷贝不仅仅是将对象引用变量分配给另一个变量,还是这样?
我问了一个关于在 java 中克隆的问题,得到的答案是深拷贝创建了一个对象的新实例,该实例在成员变量中携带相同的状态和数据。有人告诉我浅拷贝只是将对象引用分配给另一个引用变量。但这不是复制那个分配(为对象位置创建一个新指针)。
如果您尝试克隆的对象中包含引用变量,那么什么是对象的深度复制?会使用myObj2 = myObj.clone()
克隆对象中的所有组件吗?假设 myObj 包含指向其他对象位置的其他引用变量,这些引用变量也会被克隆吗?所以 myObj2 的内部引用变量不会指向与 myObj 中的指针指向的旧对象位置相同的旧对象位置。我需要在这里清楚地了解克隆的全部内容。
先感谢您。
c# - 关于克隆包含可克隆对象的数组的说明是必需的
我正在尝试以下代码:
当我按照代码中的指定修改 strValuArrayClone 对象时,即使我正在创建克隆,此更改也会反映在 strValueArray 对象中。但是,如果尝试下面的代码,那么一切都会顺利进行。我想了解它背后的逻辑。
java - 哪个类抛出 CloneNotSupportedException?或者在哪里检查 instanceof Cloneable?
为了克隆一个类的对象,我们实现了 Cloneable 接口,并重写了 clone 方法:
上面的 super.clone() 调用了 Object 的原生 API clone()。
在 Serializable 的情况下,instanceof 检查在 ObjectOutputStream 类中完成。同样,我试图找出编译器在哪里检查对象是否是可克隆的实例?检查是否在本地执行?
java - “clone()”导致 Java 桌面应用程序性能下降
我正在制作一个 3D OpenGL LWJGL 游戏,我已经用它的通用版本替换了一个用于 3D 浮点向量的类,并从“Cloneable”实现了“clone()”方法。之后,性能显着下降(GC 使用率从低于 1% 下降到 10%)。这是更改前后矢量版的代码示例:
前:
后:
但这根本没有意义,因为代码实际上做了完全相同的事情。
java - 实现可克隆接口
请注意: 我之前创建了一个帖子,其中包含这个问题以及其他几个问题,但被告知由于我在同一个帖子中问了这么多问题,最好将其分解为单独的问题。所以请不要将此标记为重复,是的,说明是相同的,是的,正在使用相同的代码,但问题本身是不同的。谢谢。
我正在使用以下说明开发一个程序:
编写一个名为 Octagon 的类,它扩展 GeometricObject 并实现 Comparable 和 Cloneable 接口。假设八边形的所有 8 个边的大小相等。面积可以使用以下公式计算
编写一个程序(驱动程序)从文件中读取一系列值,显示面积和周长,创建一个克隆并比较对象及其克隆(基于面积)。此外,您的程序应该将当前对象(刚刚读入)与读入的第一个对象进行比较。当从文件中读取一个负数时,程序结束。
这是我到目前为止的代码,这是我的 GeometricObject 类:
我的八角班:
还有我的 Driver 或 tester 类:(这是我最需要帮助的地方):
这是用于获取输入的文件。每行是一个八边形:
我很难弄清楚我将如何实现可克隆接口,以便当我打印出结果时,他们会说克隆比较:相等(或不相等)。
非常感谢任何输入。
java - clone() 方法的打印结果
请注意:我之前创建了一个帖子,其中包含这个问题以及其他几个问题,但被告知由于我在同一个帖子中问了这么多问题,最好将其分解为单独的问题。所以请不要将此标记为重复,是的,说明是相同的,是的,正在使用相同的代码,但问题本身是不同的。谢谢。
我正在使用以下说明开发一个程序:
编写一个名为 Octagon 的类,它扩展 GeometricObject 并实现 Comparable 和 Cloneable 接口。假设八边形的所有 8 个边的大小相等。面积可以使用以下公式计算
面积 = (2 + 4/2 的平方根) * 边 * 边
编写一个程序(驱动程序)从文件中读取一系列值,显示面积和周长,创建一个克隆并比较对象及其克隆(基于面积)。此外,您的程序应该将当前对象(刚刚读入)与读入的第一个对象进行比较。当从文件中读取一个负数时,程序结束。
这是我到目前为止的代码,这是我的 GeometricObject 类:
我的八角班:
还有我的 Driver 或 tester 类:(这是我最需要帮助的地方):
这是用于获取输入的文件。每行是一个八边形:
程序正在正确地比较原始对象和它的克隆,但是,我无法让它以我想要的方式打印。
由于上面的代码是写的,这是我的输出:
但我需要它看起来像这样:
我觉得这可能是我的 Octagon 类中的 toString() 方法有问题,因为这是我从中打印 getArea() 和 getPerimeter() 的地方,但我无法在该返回语句中使用 cloneComparison 编译它。
我用 toString() 方法的 return 语句尝试过的一些事情包括:
非常感谢任何输入。
java - 可克隆的现代替代品?
众所周知,它Cloneable
已无法修复(有关更多信息,请参阅此问题中的讨论)。
关于替代方案和“我如何正确地做”的最后一个问题是几年前的:
- 有没有其他方法可以在 Java 中实现克隆?
- 如何正确覆盖克隆方法?
- Clone() vs Copy constructor - 在java中推荐
- 克隆() vs 复制构造函数 vs 工厂方法?
- Java中的多态副本
- 使用复制构造函数而不是 Object.clone 进行深度复制的正确方法
所以我想再问一遍:
什么是现代(2014 年)的替代品Cloneable
?
我正在寻找一个通用的解决方案。我可以想象以下要求:
Copyable
类将实现的某种接口:A extends Copyable
.- 深度复制。如果一个 istance
A
引用了 的一个实例B
,a.copy()
则应该引用一个新的b.copy()
. - 复制到指定目标:
a.copyTo(a1)
. - 多态复制:如果
B
extendsA
then应该复制from toa.copyTo(b)
的所有属性。B
a
b
当然我可以自己实现所有这些,但是为此拥有标准接口不是很合理吗?还是我错过了什么?
我的上下文的一些背景。我经常使用 JAXB 和模式派生类。对这些类进行深度复制通常非常有用。几年前,我编写了几个 JAXB 模式编译器插件来生成copyTo
实现上述(以及更多)要求的方法。我不得不使用我自己的运行时 API。现在我正在重新审视这个案例,并决定询问是否有标准解决方案。
java - Java 深拷贝 - 错误的引用分配
请考虑以下代码
和
我正在尝试实现我自己的具有Cloneable
接口的 BST 树。我有问题的地方是
我假设没有正确设置对树的引用alfa
和beta
. 为什么我会这么认为?看看以下
因此,您可以在克隆后看到任何删除 frombeta
实际上都删除了 from alfa
,而删除 fromalfa
根本不会删除。当然,在调用clone()
每个操作之前都可以alfa
正常工作。
这是为了学习,主要任务是实现一个工作clone()
方法,所以我不想使用任何其他方式来执行深度复制。
请告知我做错了什么,因为自我调试还没有帮助。
java - 实现 Cloneable 并声明 CloneNotSupportedException 但仍然得到 CloneNotSupportedException
我正在制作一个程序,该程序构造一个包含各种对象的集合。但是,当我尝试克隆集合时,我得到了 CloneNotSupportedException,尽管声明了 CloneNotSupportedException 并实现了 Cloneable 接口。
这是代码,
任何帮助,将不胜感激。