0

オブジェクトのディープ コピー

オブジェクトを同じフィールド名を持つ別のオブジェクトにコピーする必要があります。これは BeanUtils で実現できますが、ディープ コピーを探しています。オブジェクトには別のオブジェクトのリストが含まれており、これらの「サブオブジェクト」も同様です。BeanUtils と手動コピーを部分的に使用することで、これを実現できます。

public class MindBO implements Serializable {

    private String mid;

    private String name;

    private List<TagBO> tags;

    /* Getters and Setters */
}

public class MindEO implements Serializable {

    private String mid;

    private String name;

    private List<TagEO> tags;

    /* Getters and Setters */
}

public static MindEO copy(MindBO mBO) {

    MindEO mEO = new MindEO();

    try {
        BeanUtilsBean bub = BeanUtilsBean.getInstance();
        Map<?,?> props = bub.describe(mBO);

        // Remove non-trivial List field
        props.remove("tags");

        // Copy other fields
        bub.populate(mEO, props);

        // Copy List manually
        if(mBO.getTags() != null) {
            List<TagEO> mEOTags = new ArrayList<TagEO>();
            for(TagBO tBO : mBO.getTags()) {
                mEOTags.add(map(tBO));
            }
            mEO.setTags(mEOTags);
        }

    } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
        e.printStackTrace();
    }

    return mEO;
}

ただし、このアプローチは面倒で、エラーが発生しやすく、スケーラブルではありません。これを行うより良い方法はありますか?

4

0 に答える 0