マーカー インターフェイスであるため、クローン可能なインターフェイスを実装する用途は何ですか?
私のクラスではいつでも public Object clone() メソッドを作成できます。クローン可能なインターフェースの実際の目的は何ですか?
これは、オブジェクトが ではない場合にclone()
メソッドがスローされるためです。CloneNotSupportedException
Cloneable
メソッドのドキュメントをclone()
参照してください。
clone()
クラスでメソッドを宣言する方法は次のとおりObject
です。
protected Object clone() throws CloneNotSupportedException
ノート:
Clone
また、壊れていることが判明しました。This answer here in SO では、使用を避ける理由と方法について説明しています。
マーカーインターフェースを作るCloneable
のは間違いでした。
clone()
そうは言っても、それが行うことの1つは、 inのデフォルトの実装を「有効にする」ことですObject
。そうしないとimplement Cloneable
、呼び出すsuper.clone()
とCloneNotSupportedException
.
C++ からのコピー コンストラクターを模倣する試みだと言う人もいますが、それに関する StackOverflow に関する以前の同様の質問は次のとおりです。
目的はjavadocで指定されています。このタイプのオブジェクトの複製が許可されることを指定することです。
clone()
クラスが(メソッドによって提供される)の組み込み実装に依存している場合、Object.clone()
このマーカー インターフェイスはフィールドごとの複製を有効にします。( を実装していないオブジェクトで組み込みの clone メソッドを呼び出すと、 が返されCloneable
ますCloneNotSupportedException
。)
clone() メソッドの目的は、呼び出されたオブジェクトの新しいインスタンス (コピー) を作成することです。clone メソッドの使用に関する回答でわかるように、クラスは Cloneable インターフェースを実装する必要があります。clone の実装方法を選択できます。クラスの浅いコピーまたは深いコピーを実行できます。例はhttp://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/で確認できます。