问题标签 [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 投票
5 回答
8565 浏览

java - 高效Java:clone()方法分析

考虑以下来自 Effective Java Item 11(明智地覆盖克隆)的内容,其中 Josh Bloch 解释了clone()合同的问题。

这份合同存在许多问题。“不调用构造函数”的规定太强了。行为良好的克隆方法可以调用构造函数来创建正在构建的克隆内部的对象。如果类是 final 的,clone 甚至可以返回一个由构造函数创建的对象。

final有人可以通过“如果类是,clone甚至可以返回由构造函数创建的对象”来解释 Josh Bloch 在第一段中所说的话。final跟这里有什么关系clone()

0 投票
1 回答
350 浏览

scala - Scala collection.mutable.Cloneable 目的

在尝试克隆可变集合时,我最初的方法是在 mutable.Cloneable 特征上使用 clone() 方法。但是,这取决于创建引用副本而不是深层副本的 java.Object.clone 实现。通过测试,我可以确认 mutable.{Queue,Seq,Set} 都是浅拷贝。

我采用了粗略的新 xxx(copy:_*) 方法来创建深层副本,但我的问题是 mutable.Cloneable 特征如果没有实现的目的是什么?

0 投票
3 回答
2306 浏览

java - 有效的Java。可克隆接口

我阅读了 Effective Java 书,但不理解解释 Clonable 接口的一段。有人可以解释一下这一段吗:

...程序员假设如果他们扩展一个类并 super.clone从子类调用,返回的对象将是子类的一个实例。超类可以提供此功能的唯一方法是返回通过调用super.clone. 如果一个克隆方法返回一个由构造函数创建的对象,那么它将具有错误的类。

谢谢。

0 投票
1 回答
431 浏览

java - Java 拖放和克隆

我有这个问题要解决你有一个JPanel并且JLabel你必须JLabel通过拖放克隆并在放置的位置创建一个JLabel克隆。我想问的第一件事是是否可以在匿名类中实现接口,比如监听器,所以我不必编写自己的扩展和实现的类。我知道如何通过传输“文本”属性来拖放到,但我不知道如何将一个克隆到.JPanelJLabelCloneableJLabelJLabelCloneableJLabelJTextFieldJLabelJPanel

0 投票
1 回答
1037 浏览

android - CloneNotSupportedException,但我从不调用 clone()

我收到一个 CloneNotSupportedException,但在我的代码中找不到我调用 clone() 的任何地方。我查看了 Java 文档,除了我在对象上调用 clone() 之外,我找不到任何引发此异常的原因。

有谁知道调用此异常的另一个原因?当我将一个对象设置为另一个对象时,是否会调用 clone()?我的课程都没有实现 Cloneable。

这是我的 LogCat :

0 投票
1 回答
587 浏览

c# - Winforms Designer:当我复制\粘贴我的自定义控件时,需要克隆而不是指针

我有一个名为“MyControl”的控件,它有一个与之关联的对象,名为“SettingsObject”,它是一个包含大约 15-20 个属性的对象。

我遇到了一个问题,当我使用 Visual Studio 设计器复制\粘贴我的控件时,它不会复制“SettingsObject”(我正在使用 ICloneable,或尝试使用任何构造函数来创建新对象),它只需使用指向第一个控件中的对象的指针。

如何将我的“SettingsObject”复制到副本上,而不仅仅是指向原始文件。

谢谢!

0 投票
2 回答
3402 浏览

java - java: 克隆方法违规

后面的代码:

我知道我违反了克隆的含义,因为我试图将一个对象的字段分配给一个完全不同的对象。但它的错误声明让我感到困惑。

声明:“错误:clone() 在对象中具有受保护的访问权限”

扩展 A 也应该clone()对 B 可用?如果是这样,那么 i 和 j 的值也应该复制到 l 和 m 吗?这可能吗 ?

0 投票
4 回答
2106 浏览

java - super.clone() 操作在派生类中不起作用

这是因为我的项目面临的技术困难而提出的。

问题: 我需要克隆一个类的对象,它从第三方库类扩展属性(继承)(我们无权修改其内容)

让我用下面的例子来解释:

家长班:

儿童班:

当我尝试这样做时,super.clone()方法是指 Class - UnChangeableBaseClassType 并且它不会覆盖Object clone()方法。我相信所有的类都是用 扩展的java.lang.Object class,隐式protected Object clone()方法将被继承到这个父类。所以,我认为派生类中的这个方法会覆盖父/对象克隆方法。但是在运行时 JVM 搜索在UnChangeableBaseClass. 希望我以正确的方式解释而不会使您感到困惑。

我的问题如下:

  1. 在这种典型情况下如何实现克隆方法,我们无法
    在父类中添加任何方法以必须super.clone()调用对象克隆方法。

  2. 如果上述情况不可能,是否有任何其他方法可以克隆派生类
    对象(通过考虑上述场景中的所有限制)

  3. 最后,只是为了了解这种 JVM 行为的原因(如上所述)。

0 投票
1 回答
2045 浏览

c# - 在 Session 中复制/克隆对象

当我将自定义类的实例放入 Session 中然后将其拉出时,我需要它作为 Session 中的内容的副本出现,而不是对 Session 中的内容的引用。这就是我所拥有的,出于示例目的而淡化了。

我逐步查看了 Session 变量,上面的代码导致 OLD.Company 和 NEW.Company 的 AnotherClass.Value1 被设置为“再见”。

最初的 Google 搜索将我指向在我的 Company 类上实现 IClonable 的方向。我尝试了以下方法,但无济于事:

进而...

仍然导致 OLD.Company 和 NEW.Company 的 Value1 都是“再见”。现在我怀疑这是因为 MemberwiseClone() 创建了一个“浅”副本,而我的问题是 Value1 是一个属性中的一个值,它是一个引用类型(AnotherClass)。

但同时,我也发现这个网站说不要实现 ICloneable。因此,出于我的目的,我不确定该做什么/追求什么建议。

我发现的其他几个网站显示了一些版本:

这要求我让我的类可序列化 --- 这可能没问题(我必须阅读序列化),但是在阅读了关于不使用 ICloneable 的文章后,我不确定我是否应该花时间去追求一个ICloneable 解决方案。

0 投票
2 回答
1215 浏览

android - 如何克隆 Parcel 对象

我想克隆一个 Parcel 对象(不可打包)。

我不能使用 clone() 方法,因为它受到保护。我也不能使用反射来调用它,因为 Parcel 类没有实现“可克隆”

我尝试执行问题的解决方案: 创建包裹对象的副本, 但它不适用于包裹类型本身 - 原因是没有为包裹类型本身定义“writeToParcel”。所以对于对象'Parcel a',a.writeToParcel(parcel, 0) 不会编译。