为什么不是的 .clone() 指定方法的 java.lang.Cloneable 接口?

有帮助吗?

解决方案

基本上,它是一个破碎接口。肯·阿诺德和比尔在 Java的设计问题讨论它。

阿诺德:

  

如果我要成为神在这一点上,许多人可能是很高兴我不是,我会说弃用Cloneable并有Copyable,因为Cloneable有问题。除了这个事实,它的拼写错误,Cloneable不包含clone方法。这意味着,如果事情是Cloneable的实例,你不能测试,将它转换为Cloneable,并调用clone。你必须再次使用反射,这是可怕的。这是只有一个问题,而是一个我肯定会解决。

其他提示

请参阅此错误在Java错误数据库:

http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 4098033

从本质上讲,这是在早期版本的Java,他们不打算在Cloneable接口,以解决因为这样做会打破一些现有的代码兼容性的设计缺陷。

在爪哇,还有这个概念的标记的接口。的 Cloneable 接口有没有方法或领域,只提供识别的语义是可复制.

dev-x 网站:

你经常会碰到的接口在Java没有任何行为。换句话说,他们只是空口的定义。这些被称作标记的接口。一些例子接口标记在API包括:

在我工作的项目,我们已经创建了一个名为PublicCloneable接口, 它包含的克隆的方法和指定它是公开的。

我觉得这是一个非常有用的事实:有一个克隆的方法,但你不能访问它并没有太大帮助。

public interface PublicCloneable extends Cloneable {
    public Object clone();
}

由于克隆方法在由于其“特殊”条件对象类实现:任何种类的对象的存储器复制

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top