2017-01-04 6 views
0

私は彼の中にオブジェクトのリストを持っているオブジェクトを複製しようとしていました。 オブジェクト全体とそのリストも複製したいです。したがって、我々はロードされ、Java 1.7 - オブジェクトとその中のリストをクローズする

MyObject original = new MyObject(); 

そして、我々はこのオブジェクトを使用していることとします

public class MyObject implements Cloneable{ 
    private long a; 
    private List<AnotherObject> listA; 
    private List<AnotherObject> listB; 

    //getter and setter methods; 

    @Override 
    public Object clone() throws CloneNotSupportedException { 
     return super.clone(); 
    } 
} 

私は彼のインスタンスを作成します。私はこれを持って

私は私の自己を説明します彼の中のリスト。

今、私はそれを複製したいと思います。

私はそれは私が彼らのリストが同じメモリ領域を指しているのを見

MyObject clone = (MyObject) original.clone(); 

十分だった。しかし、デバッグモードでオリジナルとクローン化されたオブジェクトを検査考え、これを実行し。

実際、元のオブジェクトのlistAの要素を変更すると、この変更もクローンオブジェクトで表示されます。

それは私が行って解決するには、次の

clone.setListA(new ArrayList<AnotherObject>(original.getListA()); 

それは良い解決策ですか?

+0

あなたはそうbasicly、同じリストを同じ参照を使用します、はい、リストのクローンを作成する場合は必要はありません。しかし、リスト内のインスタンスもクローンしたいかもしれません。 – AxelH

答えて

0

おそらく、MyObject#clone()メソッドでディープクローンを実装したほうがよいでしょう。たとえば、cloningKryoという深いクローンライブラリを使用することができます。

関連する問題