我正在閱讀正确執行數組的深層拷貝,但是我對#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這樣做呢?我确定他們有合理的理由,但我似乎無法弄清楚.