2016-11-14 6 views
0

同じフィールドを持つ別のクラスオブジェクトにオブジェクトをディープコピーする方法はありますか?

public class A implements Serializable { 

    private String name; 
    private List<String> nameList; 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public List<String> getNameList() { 
     return nameList; 
    } 
    public void setNameList(List<String> nameList) { 
     this.nameList = nameList; 
    } 
} 

public class B implements Serializable { 

    private String name; 
    private List<String> nameList; 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public List<String> getNameList() { 
     return nameList; 
    } 
    public void setNameList(List<String> nameList) { 
     this.nameList = nameList; 
    } 
} 

を次のように私は今、私はフィールドが初期化の両方で、クラスA、AOBJのオブジェクトを持つ2つのJavaクラスを持っています。 BeanUtils.copyProperties(Bobj、Aobj)を使用していますが、nameフィールド値のみがBobjにコピーされますが、Bobj.nameListはnullです。オブジェクトをディープコピーしてListやMapなどのコレクションを含むすべてのフィールドをコピーする方法はありますか?

私はどこかでDozerについて聞いたことがあります。

+0

なぜ手動でコピーしないのですか? (例えば、コピーconstで) –

+0

はい、Dozerはこの種のユースケースを意味します。デフォルトでは、異なるクラスタイプの2つのオブジェクト間で、同じプロパティ名を持つフィールドをマップします。必要に応じて、マッピングされるフィールド、マッピング方法、値の読み取りおよび設定方法を設定できます。あなたの特定のケースでは、デフォルトのマッピングは正常に動作します。 –

+0

@Ahmet AYはい、私は現在手動で行っています。事は私の実際のユースケースを扱うもので、多くのフィールドが2つだけでなく手動で行っているので、異なった見た目では扱いにくいです。 –

答えて

1

絶対に同じ2つのクラスがあるのはちょっと変です。しかし、それにかかわらず、あるものを別のものに深くコピーするには、いくつかのUtilクラスに2つの静的メソッドを書くだけです。 1つの方法はクラスAを取り、クラスBを返し、別の方法はBを取り、クラスAを返す。自分で深いコピーを行う。また、クラスAとBと同じクラスCを作成し、クラスAとBをそれぞれCを拡張する空クラスにすることができます。同じ構造になりますが、できるだけ簡単にコピーロジックを作成できますCのインスタンスとしてAとBの両方で動作します。

関連する問題