1

私はから読んcloneEffective Java
いますそれはclone呼び出される最初のメソッドではでなければならないと言っていますsuper.clone()
この場合、私は最終的には階層チェーンを上るということを呼び出すことになると思いcloneますjava.lang.Object
しかし、オブジェクトのクローンは何もしないと思いました。
コードを見る
protected native Object clone() throws CloneNotSupportedException;と、実装はありません。しかし、この段落から、クラスにプリミティブフィールドしかない場合は、クローンを作成するには
呼び出しで十分であるように思われます。 しかし、どのように?です。
(ClassX) super.clone()
super.cloneObject

4

3 に答える 3

3

Object でのこの宣言

  protected native Object clone() throws CloneNotSupportedException;

...cloneメソッドがネイティブ コードで実装されていることを意味します。つまり、カーテンの後ろで魔法が起こっています。

Object.clone()が実際に何かを行うことを保証できます...クラスが実装として宣言されている場合Cloneable。しかし、それが行うことはプレーンな Java では表現できません。

于 2012-05-02T06:50:36.343 に答える
2

clone() は、オブジェクトを複製するための Java のメソッドです。Java では、オブジェクトは参照変数を介して操作され、オブジェクトをコピーするための演算子はありません。代入演算子は、オブジェクトではなく参照を複製します。clone() メソッドは、この不足している機能を提供します。

于 2012-05-02T06:30:24.863 に答える
1

そうです、常に呼び出す必要があるオブジェクトを複製するときはsuper.clone()(最初のステートメントとして)、オブジェクトの残りの部分を手動で複製します。これは、オブジェクトを複製するときに、そのスーパー クラス部分がオブジェクトも正しい方法でクローンを取得します...

オブジェクトが clone をサポートしていない場合は、それがスローしCloneNotSupportedExceptionます。これは、スーパー オブジェクトを複製しようとして例外が発生した場合、サブタイプにも複製オブジェクトを実装できず、オブジェクトを複製できないことを意味します。オブジェクトのクローン作成操作を禁止する状況はいくつかあります。

于 2012-05-02T06:37:04.517 に答える