天天看点

java的cloneable,java – 为什么#clone()不在Cloneable界面?

我正在阅读正确执行数组的深层拷贝,但是我对#clone()的实现感到困惑.它是

java.lang.Object类的成员,但如果您读取了javadocs:

First,if the class of this object does not implement the interface Cloneable,then a CloneNotSupportedException is thrown.

那么为什么要在那里定义克隆方法呢?当然如果一个方法只能在接口存在的时候使用,那么你可以将该方法放在接口中.可克隆的界面本身是空的它只是Java使用的标记界面,以确保使用克隆方法是合法的.

这样做也可以消除使用仿制药来确保类型安全的能力:

class Foo implements Cloneable { // Valid.

@Override

public Object clone() throws CloneNotSupportedException {

// ...

}

}

class TypeSafeFoo implements Cloneable { // Not valid.

@Override

public TypeSafeFoo clone() throws CloneNotSupportedException {

// ...

}

}

为什么Java这样做呢?我确定他们有合理的理由,但我似乎无法弄清楚.