问题标签 [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 回答
5033 浏览

java - 克隆是否比构造函数/工厂方法提供了性能改进?

我正在维护一个较旧的 Java 代码库(jvm 1.4),它似乎使用克隆作为对象实例化的替代方法,我猜它是一种性能优化。这是一个人为的例子:

尽管有关于过早优化的常见警告,但这实际上是在某些时候推荐的习语吗?

0 投票
4 回答
49062 浏览

c# - 为什么要在 C# 中实现 ICloneable?

你能解释一下为什么我应该继承ICloneable并实现这个Clone()方法吗?

如果我想做一个深拷贝,我不能只实现我的方法吗?比方说MyClone()

我为什么要继承 from ICloneable?有什么优势?只是让代码“更具可读性”吗?

0 投票
5 回答
7746 浏览

java - Java:Cloneable 接口的基本原理

为什么接口中没有.clone()指定方法java.lang.Cloneable

0 投票
4 回答
22336 浏览

java - java中可克隆接口和object.clone()的混淆

如果我有:

然后做:

我得到了一个浅拷贝,而无需bar.clone()像我通常在实现接口时那样编写任何代码。

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

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

0 投票
7 回答
3469 浏览

java - Java 对象何时可序列化但不可克隆?

如果 Java 类实现了Serializable接口但没有公共clone()方法,通常可以像这样创建深拷贝:

我经常遇到像这样的第三方库类,并诉诸上述黑客攻击。我什至ObjectOutputStream有时会扩展以使副本更浅。除了效率低下(编码/解码速度慢并且临时序列化图会消耗大量内存)之外,它从未引起严重问题。)

如果使用这种技术不安全,那么类可能不应该被声明Serializable

所以我想知道的是,如果你的类是Serializable,什么可能会阻止你定义一个公共clone()方法(使用Cloneable接口或复制构造函数?)


相关:在 Java 中复制对象

0 投票
9 回答
118368 浏览

java - 如何正确覆盖克隆方法?

我需要在我的一个没有超类的对象中实现深度克隆。

CloneNotSupportedException处理超类(即)抛出的检查的最佳方法是Object什么?

一位同事建议我按以下方式处理:

这对我来说似乎是一个很好的解决方案,但我想把它扔给 StackOverflow 社区,看看是否还有其他可以包含的见解。谢谢!

0 投票
3 回答
48990 浏览

java - instanceof - 不兼容的条件操作数类型

以下编译良好:

但这不会:

抛出编译器错误。

问题是什么?

0 投票
2 回答
916 浏览

java - Object[] 如何可克隆

这给出了真实的 o/p。我不明白为什么?

0 投票
2 回答
933 浏览

java - 在 Java 中实现可克隆

在哪些情况下我应该使用这种方式:

在哪些情况下我应该使用这种方式:

如果x是最终的并且我想使用第一种方式,我该怎么办?

关于第一种方式,我的理解是这样的:我们克隆超类并向上转换它,导致一些成员未初始化。在此之后初始化这些成员。我的理解正确吗?

谢谢你。

0 投票
3 回答
1671 浏览

java - 关于Cloneable接口和应该抛出的异常的问题

Java 文档说:

一个类实现了 Cloneable 接口,以向 Object.clone() 方法指示该方法可以合法地对该类的实例进行逐个字段的复制。

在未实现 Cloneable 接口的实例上调用 Object 的 clone 方法会导致抛出异常 CloneNotSupportedException。

按照惯例,实现此接口的类应使用公共方法覆盖 Object.clone(受保护的)。有关覆盖此方法的详细信息,请参阅 Object.clone()。

请注意,此接口不包含 clone 方法。因此,不可能仅凭借实现该接口的事实来克隆对象。即使以反射方式调用 clone 方法,也不能保证它会成功。

我有这UserProfile堂课:

为了测试 porpuses,我这样做main()

到目前为止,编译/运行没有问题。现在,根据我对文档的理解,implements CloneableUserProfile类中删除应该会在调用中引发异常up1.clone(),但事实并非如此。

我在这里读到 Cloneable 接口坏了,但我真的不知道这意味着什么。我错过了什么吗?