私はEffective Javaを読んでいて、この本はクローンメソッドについて以下のコメントを持っています。実際にJava:クローンメソッドに関する質問
、Cloneableを実装し クラスが適切に機能して 公共クローン方法を提供することが期待されます。 すべてのクラスのスーパークラスが、正常に動作するクローンの実装を提供しない限り、 publicかprotectedかにかかわらず、一般的にそうすることはできません。
誰にもこれを行うことができない理由の例はありますか?
私はEffective Javaを読んでいて、この本はクローンメソッドについて以下のコメントを持っています。実際にJava:クローンメソッドに関する質問
、Cloneableを実装し クラスが適切に機能して 公共クローン方法を提供することが期待されます。 すべてのクラスのスーパークラスが、正常に動作するクローンの実装を提供しない限り、 publicかprotectedかにかかわらず、一般的にそうすることはできません。
誰にもこれを行うことができない理由の例はありますか?
基本クラスの1つに、「クローン」が意味的に有効であるように特定の方法でコピーされるプライベートフィールドがあるとします。
その基本クラスが正しいクローン実装を提供しない場合、派生クラスはそのプライベートフィールドを正しく構築する方法がありません。
基本的に、クラス階層の一部に、あなたのコントロール下になく、JDKの一部ではないクラス(つまりサードパーティのクローズドソースクラス)が含まれていて、このクラスではwell-behaved clone()
メソッドを作成すると、それを作成するのは特に簡単ではありません。
多くの場合、クラスは通常、実装されていないクローンで作成されます。したがって、子クラスが作成されたときには、それは同様に、インプリメントされていないクローンで記述されます。ある時点では、子クラスにクローンメソッドを書き込む必要がありますが、親クラスにはクローンメソッドがありません。
`@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.
}
`
これはアンサーですか?