0

インターフェイス コンパイラを実装する場合、これらのメソッドの実装を提供するよう求められます。ただし、オーバーライドされた clone() メソッドを呼び出す場合、特定のインターフェイスがCloneableクラス宣言で言及されていないことをコンパイラが知る方法 (この場合は )。CloneNotSupported であることをユーザーに伝えるために、コンパイラはこのマッピングをどのように行いますか? 遅延バインディングと関係がありますか?

JVMには、メソッド領域の各クラスに関する情報があり、拡張しているクラスや実装しているインターフェースなどの情報があると思います。Cloneableしたがって、 clone() メソッドを呼び出すと、クラスに関する保存されたメタデータがチェックインされ、そのインターフェイスのリストにないことがわかりますか? これはどこか正解に近いですか?

4

1 に答える 1

3

了解しました。基本的に、Object.clone()メソッドは次のことを行います。

if (!(this instanceof Cloneable)) {
    throw new CloneNotSupportedException(); 
}

javadoc では次のように説明されています。

まず、このオブジェクトのクラスがインターフェース Cloneable を実装していない場合、CloneNotSupportedException がスローされます。

コンパイラはそれとは何の関係もないことに注意してください。すべて実行時に発生します。

于 2012-05-22T07:31:42.003 に答える