我正在阅读正确执行数组的深拷贝,但是我对如何#clone()
实现感到困惑。它是java.lang.Object
该类的成员,但是如果您阅读 javadocs:
首先,如果该对象的类没有实现接口 Cloneable,则抛出 CloneNotSupportedException。
那么为什么clone
首先在那里定义方法呢?当然,如果一个方法只能在接口存在时使用,你应该把方法放在接口中。Cloneable
接口本身是空的;它只是Java用来确保使用该clone
方法是合法的标记接口。
这样做也消除了使用泛型来确保类型安全的能力:
class Foo implements Cloneable { // Valid.
@Override
public Object clone() throws CloneNotSupportedException {
// ...
}
}
class TypeSafeFoo implements Cloneable<TypeSafeFoo> { // Not valid.
@Override
public TypeSafeFoo clone() throws CloneNotSupportedException {
// ...
}
}
为什么 Java 会这样做呢?我确信他们有正当的理由,但我似乎无法弄清楚。