1

みんな、これはすでに尋ねられている質問のように聞こえるかもしれませんが、そうではありません。

ここでの問題は簡単です。クローン、コピー コンストラクター、コピー ファクトリ メソッドを使用せずに、オブジェクトの正確なコピーを作成したいのです。クラスを変更できないためです (権限なし)。Dog オブジェクトがあるとします

もう 1 つ Dog オブジェクトを作成したいのですが、この複製でいくつかの属性の値を変更する必要がありますが、元のオブジェクトはまったく影響を受けません。

ありがとう

4

5 に答える 5

4

オブジェクトがそれをサポートしている場合は、シリアライゼーション/デシリアライゼーションを検討できますが、パフォーマンスの点で重い可能性があります。 ObjectOutputStream
を使用することも別のオプションです: http://docs.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html#replaceObject%28java.lang.Object%29
「効果的なJava」の「防御的にreadObjectメソッド」。これは、オブジェクト入力ストリームで実行できる厄介なトリックを示しています。

于 2013-07-16T09:36:46.957 に答える
1

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.

}
于 2013-07-16T09:36:17.937 に答える
0

このように、これを行う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;
       }
   }
于 2013-07-16T09:51:23.007 に答える