Javaでオブジェクトをコピーするにはどうすればいいですか?
以下のコードを考えてみましょう。
DummyBean dum = new DummyBean();
dum.setDummy("foo");
System.out.println(dum.getDummy()); // prints 'foo'
DummyBean dumtwo = dum;
System.out.println(dumtwo.getDummy()); // prints 'foo'
dum.setDummy("bar");
System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'
つまり、dum
をdumtwo
にコピーして、dumtwo
に影響を与えずにdum
を変更したいのです。しかし、上記のコードではそれができません。私が dum
で何かを変更すると、同じ変更が dumtwo
にも起こります。
おそらく、dumtwo = dum
と言ったとき、Javaは参照のみをコピーしているのでしょう。そこで、dum
の新しいコピーを作成して、それをdumtwo
に割り当てる方法はありませんか?
759
3
ディープコピー]1を行う必要があります。
clone()についてのきちんとした説明がありますので、必要になった場合はご覧ください。
こちら:clone(Javaメソッド)
そのためには、何らかの方法でオブジェクトのクローンを作る必要があります。Javaにはクローンを作る仕組みがありますが、必要がなければ使わないでください。コピーの仕事をしてくれるコピー・メソッドを作って、それを実行してください。
コピーを実現するためのさまざまなテクニックについては、こちらに詳しいアドバイスがあります。