みんな、これはすでに尋ねられている質問のように聞こえるかもしれませんが、そうではありません。
ここでの問題は簡単です。クローン、コピー コンストラクター、コピー ファクトリ メソッドを使用せずに、オブジェクトの正確なコピーを作成したいのです。クラスを変更できないためです (権限なし)。Dog オブジェクトがあるとします
もう 1 つ Dog オブジェクトを作成したいのですが、この複製でいくつかの属性の値を変更する必要がありますが、元のオブジェクトはまったく影響を受けません。
ありがとう
みんな、これはすでに尋ねられている質問のように聞こえるかもしれませんが、そうではありません。
ここでの問題は簡単です。クローン、コピー コンストラクター、コピー ファクトリ メソッドを使用せずに、オブジェクトの正確なコピーを作成したいのです。クラスを変更できないためです (権限なし)。Dog オブジェクトがあるとします
もう 1 つ Dog オブジェクトを作成したいのですが、この複製でいくつかの属性の値を変更する必要がありますが、元のオブジェクトはまったく影響を受けません。
ありがとう
オブジェクトがそれをサポートしている場合は、シリアライゼーション/デシリアライゼーションを検討できますが、パフォーマンスの点で重い可能性があります。
ObjectOutputStream
を使用することも別のオプションです: http://docs.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html#replaceObject%28java.lang.Object%29
「効果的なJava」の「防御的にreadObjectメソッド」。これは、オブジェクト入力ストリームで実行できる厄介なトリックを示しています。
NewDog
を使用するための新しいオブジェクトを作成するだけOldDog
です。このようなことを検討しましたか?
NewDog dog = new NewDog(someOldDogObject);
のコンストラクターはNewDog
できます。
public NewDog(OldDog oldDog){
this.dogWeight = oldDog.dogWeight; // keeping the same weight
this.dogName = "newDog" + oldDog.dogName; // changing your dog name as per rquirement.
}
このように、これを行うutilメソッドを作成できます
public class MyDogUtils {
public Dog copy(final Dog res, final Dog dest) {
final Dog ret = (dest == null) ? new Dog() : dest;
ret.setName(res.getName());
// some code here
return ret;
}
}