私は暗黙のための慣習を知っていますObject#clone()
はsuper.clone()
に電話をかけてコピーしたオブジェクトを取得すると言います。実際にsuper.clone()を呼び出さないObject.clone()の結果は何ですか?
しかし、もし私がそうでなければ、結果が何であるか疑問に思っています。それでは、この例を想定してみましょう:
class SomeClass implements Cloneable {
private Object someField;
public SomeClass(Object someField) {
this.someField = Object someField;
}
public Object clone() {
return new SomeClass(this.someField);
}
}
私は、これは右(TM)ではないと感じています。コピーコンストラクタやコピーメソッドが必要な場合は、それを使用するだけで、Object#clone()
は使用しません。
しかし、いくつかのレガシーコードでこれにつまずいている間、私はちょうど疑問に思った:これは実際に危険ですか?またはちょうど創造的なが、実際には悪いスタイルですか?
オブジェクトを深くコピーするのではなく、単純に浅くコピーします。 someFieldの超過は両方のオブジェクトに影響を与えます –
super.clone()はデフォルトで浅いコピーを作成するだけなので、これは問題ではありません –