7

マーカー インターフェイスであるため、クローン可能なインターフェイスを実装する用途は何ですか?

私のクラスではいつでも public Object clone() メソッドを作成できます。クローン可能なインターフェースの実際の目的は何ですか?

4

5 に答える 5

7

これは、オブジェクトが ではない場合にclone()メソッドがスローされるためです。CloneNotSupportedExceptionCloneable

メソッドのドキュメントをclone()参照してください。

clone()クラスでメソッドを宣言する方法は次のとおりObjectです。

protected Object clone() throws CloneNotSupportedException

ノート:

Cloneまた、壊れていることが判明しました。This answer here in SO では、使用を避ける理由と方法について説明しています。

于 2012-07-14T06:21:42.570 に答える
4

マーカーインターフェースを作るCloneableのは間違いでした。

clone()そうは言っても、それが行うことの1つは、 inのデフォルトの実装を「有効にする」ことですObject。そうしないとimplement Cloneable、呼び出すsuper.clone()CloneNotSupportedException.

于 2012-07-14T06:22:14.053 に答える
2

C++ からのコピー コンストラクターを模倣する試みだと言う人もいますが、それに関する StackOverflow に関する以前の同様の質問は次のとおりです。

于 2012-07-14T06:23:11.893 に答える
2

目的はjavadocで指定されています。このタイプのオブジェクトの複製が許可されることを指定することです。

clone()クラスが(メソッドによって提供される)の組み込み実装に依存している場合、Object.clone()このマーカー インターフェイスはフィールドごとの複製を有効にします。( を実装していないオブジェクトで組み込みの clone メソッドを呼び出すと、 が返されCloneableますCloneNotSupportedException。)

于 2012-07-14T06:23:14.783 に答える
2

clone() メソッドの目的は、呼び出されたオブジェクトの新しいインスタンス (コピー) を作成することです。clone メソッドの使用に関する回答でわかるように、クラスは Cloneable インターフェースを実装する必要があります。clone の実装方法を選択できます。クラスの浅いコピーまたは深いコピーを実行できます。例はhttp://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/で確認できます。

于 2012-07-14T06:28:15.963 に答える