インターフェースの Java 仕様は、java.lang.Cloneable
インターフェースを拡張するすべてのオブジェクトが、clone()
内で休眠状態にあるメソッドも実装していることを示すものとして定義していますjava.lang.Object
。具体的には、次のように述べています。
クラスは、そのメソッドがそのクラスのインスタンスのフィールドごとのコピーを作成することが正当であることをメソッド
Cloneable
に示すインターフェイスを実装します。java.lang.Object#clone()
私にとって、これは、拡張するすべてのクラスがその中にメソッドCloneable
も持っていると想定する必要があることを意味します。public Object clone()
これにより、次の方法が有効であると簡単に推測できます。
public static makeACloneFrom(Cloneable c)
{
return c.clone();
}
ただし、Cloneable
ソースコード全体 (sans javadoc) は単に
package java.lang;
public interface Cloneable {
}
つまり、それCloneable#clone()
は存在しません (そして、上記のサンプル メソッドをコンパイルしようとすると、" " のようなコンパイル時エラーがスローされますcannot find symbol: method clone()
)。のソース コードにCloneable
は、 の影響を受ける何かが含まれているべきではありませんpublic Cloneable clone();
か?
Cloneable
を実装するクラスがメソッドを持っていると想定できないのはなぜpublic Cloneable clone()
ですか?