【发布时间】:2008-12-23 08:55:27
【问题描述】:
Java 5 引入了泛型,它们被添加到java.lang 包中的许多接口中。但是,Cloneable 没有获得泛型。我想知道为什么?
编辑:回复@Jon 和@litb 的回答,以及@Earwicker 的评论,我想Cloneable 可能是:
public interface Cloneable<T> {
public T clone();
}
这里T clone(); 覆盖Object.clone(),给它一个协变类型。我相信这仍然是向后兼容的并增加了类型安全性。那为什么不呢?
编辑 2: 从下面的答案(和 cmets)中可以看出,上面建议的界面会破坏向后兼容性。由于Object.clone() 是protected,在接口中重写它会强制所有实现者提供public 实现,而类设计者可能不希望这样做(即他们可能会选择保留它protected)。
【问题讨论】:
-
这个问题的答案(由 Skeet 和 libt 给出)只是提出了进一步的问题,例如为什么 Cloneable 不包含 clone 方法?
-
引用关于该主题的 Sun 错误,即“迷失在时间的迷雾中”(不,可能不是准确的引用,因为我没有打开错误)