对象的深拷贝
我需要将一个对象复制到另一个具有相同字段名称的对象。这可以通过 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;
}
但是,这种方法繁琐、容易出错、不可扩展。有一个更好的方法吗?