2011-11-14 12 views
2

私はEffective Javaを読んでいて、この本はクローンメソッドについて以下のコメントを持っています。実際にJava:クローンメソッドに関する質問

、Cloneableを実装し クラスが適切に機能して 公共クローン方法を提供することが期待されます。 すべてのクラスのスーパークラスが、正常に動作するクローンの実装を提供しない限り、 publicかprotectedかにかかわらず、一般的にそうすることはできません。

誰にもこれを行うことができない理由の例はありますか?

答えて

3

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

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

1

基本的に、クラス階層の一部に、あなたのコントロール下になく、JDKの一部ではないクラス(つまりサードパーティのクローズドソースクラス)が含まれていて、このクラスではwell-behaved clone()メソッドを作成すると、それを作成するのは特に簡単ではありません。

0

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

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. 

} 
` 

これはアンサーですか?