带有List字段的对象的深层副本

时间:2013-09-13 12:05:14

标签: java apache-commons-beanutils

对象的深层复制

我需要将一个对象复制到另一个具有相同字段名称的对象。这可以通过BeanUtils实现,但我正在寻找深层复制。对象包含另一个对象的List,并且这些“子对象”也是类似的。我可以通过部分使用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;
}

然而,这种方法繁琐,容易出错,不可扩展。有更好的方法吗?

0 个答案:

没有答案