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