2

私はEffective Javaを読んでいますが、本にはcloneメソッドに関する以下のコメントがあります。

実際には、Cloneable を実装するクラスは、適切に機能する public clone メソッドを提供することが期待されます。一般に、クラスのすべてのスーパークラスが、パブリックかプロテクトかにかかわらず、正常に動作するクローン実装を提供しない限り、これを行うことはできません。

これができない理由の例を誰か挙げることができますか?

4

4 に答える 4

3

基本クラスの 1 つに、「クローン」が意味的に有効になるように特定の方法でコピーされるプライベート フィールドがあるとします。

その基本クラスが正しいクローン実装を提供しない場合、派生クラスもできません。そのプライベート フィールドを正しく構築する方法がありません。

于 2011-11-14T09:34:31.980 に答える
1

基本的に、クラス階層の一部に、自分の管理下になく、JDK の一部ではないクラス (つまり、サードパーティのクローズドソース クラス) が含まれており、このクラスが行儀の良いclone()メソッドを実装していない場合、それは正しくありません。特に簡単に作成できます。

于 2011-11-14T09:35:05.463 に答える
0
`@override
public MyClass clone(){

Myclass clonedObj = super.clone(); // This is why the classtree all needs to be cloneable

// now copy values of all members to the new obj.
// be carefull to not copy references
clonedobj.setMyMember(this.getMyMember()); // copy of member var;
clonedobj.setMyotherMember(this.getMyOtherMember().clone()); // a composit obj must be cloned.

}
`

これはアンサーになることができますか?

于 2011-11-14T09:43:50.673 に答える
0

多くの場合、クラスは通常、クローンが実装されていない状態で作成されます。そのため、子クラスが作成されるときも同様に実装されていないクローンで作成されます。ある時点で、子クラスにクローン メソッドを記述する必要がありますが、その親にはクローン メソッドがありません。

于 2011-11-14T09:35:51.033 に答える