- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
Java: Rationale of the Cloneable interface
(5 个回答)
Why is Cloneable not deprecated?
(3 个回答)
Why does java.lang.Cloneable not override the clone() method in java.lang.Object?
(2 个回答)
2年前关闭。
我试图了解 Object.clone() 在 Java 中的工作原理。我遇到了以下事实:
Cloneable
接口(interface)向 Object.clone() 方法指示该方法制作该类实例的逐个字段副本是合法的。 Object
的clone
未实现 Cloneable
的实例上的方法接口(interface)导致异常 CloneNotSupportedException
被抛出。 Cloneable
接口(interface)不包含 clone
方法。因此,实现 Cloneable
不负责因未实现 clone()
而引发任何错误/异常. Object.clone()
是 native 方法,calls JVM_Clone
from jvm.cpp
和 CloneNotSupportedException
是 thrown在这个 cpp 方法中。 clone()
定义于
Cloneable
如果实现类不提供
clone()
的实现,它本身将给出编译时错误.
Cloneable
在运行时?
Object
本身没有实现
Cloneable
, 但提供了
clone()
的实现,然后检查是否有任何类实现了
Cloneable
实现
clone()
或不。理想情况下不应该
Object
实现
Cloneable
(声明
clone()
)然后提供
clone()
的实现?
Cloneable
不包含
clone()
?”但是,我觉得,为了更好地回答这个疑问,必须涵盖这个设计决策的各个微妙方面。我努力思考更多,想出了可能的不同微妙方面,并明确地逐点提问,这样回答者就不会错过它们,并会给出一个整体完整的答案。
最佳答案
问题是他们想提供 clone() 方法的默认实现,但当时不存在默认方法,所以他们只有 Object.clone 和 Cloneable 接口(interface)来表示它可以被克隆。所以它真的只是它老了。
正如另一位用户之前所说,clone 方法是 native 方法,并且接口(interface)中也不允许使用该修饰符。使 Cloneable 成为抽象类不是一种选择,因为您将被迫扩展它并且无法扩展其他类,因为 Java 并不真正具有多重继承。为什么不只是所有对象都支持克隆,我不知道。
关于java - 为什么 Cloneable 没有 clone()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60745648/
我正在从 C++ 迁移到 Java,并认为自己是 Java 菜鸟。我最近一直在查看一个庞大的代码库,其中有几个类型的示例 public class Myclass implements Cloneab
class MyCls implements Cloneable { @Override protected MyCls clone() throws CloneNotSupportedExc
public class test implements Cloneable { @Override public test clone() { return (tes
class MyCls implements Cloneable { @Override protected MyCls clone() throws CloneNotSupportedExc
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
我有一个非常简单的问题(我猜!)Cloneable接口(interface)如何保护clone方法,而接口(interface)只能声明public方法? 最佳答案 Cloneable是 marker
我必须克隆一个没有实现 Cloneable 接口(interface)的对象,该怎么做。 实际上,在我的项目中,我正在使用 JCChart。现在我的类扩展了 MultiChart,我必须创建类的深拷贝
我的框架处理任何类的域对象。我需要能够浅克隆这样的域对象实例 foo,就好像它实现了 Cloneable(它没有实现)并且我调用了 Object.clone () 返回一个浅克隆。 不起作用的东西:
我已经阅读了 Object 和 Cloneable 的 javadoc,只是没有“得到”一些东西。有人可以向我解释以下两个示例的性能和/或功能差异吗: public class Widget {
假设我有这个类: public abstract class AbstractFoo implements Cloneable { public abstract Object clone()
我正在读这个answer他提到了一个link ,作者解释了为什么我们不应该使用 Cloneable。但是,仍然怀疑那里所说的内容 If I have an array of Cloneable, yo
嘿,我实际上正在使用 Java 上的自定义 Vector 类, public class Vector { private double X; private double Y;
public class Color { String color; Color(String color) { this.color=color; } } publi
在尝试克隆可变集合时,我最初的方法是对 mutable.Cloneable 特征使用 clone() 方法。但是,这取决于创建引用副本的 java.Object.clone 实现,而不是深拷贝。通过测
我不明白为什么我们不能执行以下操作: interface MyInterface extends Cloneable {} class myClazz implements MyInterface {
在尝试克隆可变集合时,我最初的方法是对 mutable.Cloneable 特征使用 clone() 方法。但是,这取决于创建引用副本的 java.Object.clone 实现,而不是深拷贝。通过测
这个问题在这里已经有了答案: Java: Rationale of the Cloneable interface (5 个回答) Why is Cloneable not deprecated? (
为什么我们不能将 Cloneable 作为抽象类而不是将其作为接口(interface)? 最佳答案 Java不支持类的多重继承。 如果Cloneable(其中抽象类)您强制整个对象树可克隆或不可克隆
要克隆类的对象,我们实现 Cloneable 接口(interface),并重写克隆方法: protected Object clone() throws CloneNotSupportedExcep
为什么以下代码在 JDK7 中抛出 CloneNotSupportedException 而在 JDK6 中不抛出? public class DemoThread extends Thread im
我是一名优秀的程序员,十分优秀!