繁体   English   中英

Java:Cloneable 接口的基本原理

[英]Java: Rationale of the Cloneable interface

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

基本上,这是一个损坏的界面。 Ken Arnold 和 Bill Venners 在Java 设计问题中讨论了它。

阿诺德:

如果我在这一点上成为上帝,很多人可能很高兴我不是,我会说弃用Cloneable并拥有一个Copyable ,因为Cloneable有问题。 除了拼写错误之外, Cloneable不包含clone方法。 这意味着您无法测试某物是否是Cloneable的实例,将其转换为Cloneable并调用clone 您必须再次使用反射,这很糟糕。 这只是一个问题,但我肯定会解决一个问题。

在 Java 错误数据库中查看此错误:

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

本质上,这是 Java 早期版本中的设计缺陷,他们不打算在 Cloneable 接口中修复,因为这样做会破坏与某些现有代码的兼容性。

在Java中有这个标记接口的概念。 Cloneable接口没有方法或字段,仅用于识别可克隆的语义。

来自dev-x网站:

您经常会在 Java 中遇到没有任何行为的接口。 换句话说,它们只是空的接口定义。 这些被称为标记接口。 Java API 中的一些标记接口示例包括:

在我从事的项目中,我们创建了一个名为 PublicCloneable 的接口,它包含 clone 方法并指定它是公共的。

我发现这个很有用:有一个克隆方法,但您无法访问它并没有多大帮助。

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

因为克隆方法是在 Object class 中实现的,因为它的“特殊”条件:任何类型对象的 memory 副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM