【发布时间】:2012-04-16 10:19:27
【问题描述】:
java.lang.Cloneable 接口的 Java 规范将其自身定义为表示扩展它的任何对象也实现了 clone() 方法,该方法在 java.lang.Object 中处于休眠状态。具体来说,它说:
一个类实现了
Cloneable接口,以向java.lang.Object#clone()方法指示该方法对该类的实例进行逐个字段的复制是合法的。
对我来说,这意味着应该假设每个扩展 Cloneable 的类因此在其中也有一个 public Object clone() 方法。这使得很容易假设以下方法是有效的:
public static makeACloneFrom(Cloneable c)
{
return c.clone();
}
然而,情况并非如此,因为整个 Cloneable 源代码(无 javadoc)只是
package java.lang;
public interface Cloneable {
}
这意味着Cloneable#clone() 不存在(并且尝试编译上面的示例方法会引发编译时错误,例如“cannot find symbol: method clone()”)。 Cloneable的源代码不应该包含public Cloneable clone();的效果吗?
为什么我们不允许假设实现 Cloneable 的类具有 public Cloneable clone() 方法?
【问题讨论】: