Java:理由的可复制的界面
-
22-08-2019 - |
题
为什么不是的 .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();
}
由于克隆方法在由于其“特殊”条件对象类实现:任何种类的对象的存储器复制
不隶属于 StackOverflow