Java 将所有bean属性复制到另一个bean中的有效方法

Java 将所有bean属性复制到另一个bean中的有效方法,java,javabeans,Java,Javabeans,我正在尝试将所有属性从一个bean复制到另一个bean: public void copy(MyBean bean){ setPropertyA(bean.getPropertyA()); setPropertyB(bean.getPropertyB()); [..] } 如果您有一个具有很多属性的bean,那么这很容易出错,并且需要编写很多内容 我想通过反射来实现这一点,但我无法将一个对象的getter连接到另一个对象的setter public List<Me

我正在尝试将所有属性从一个bean复制到另一个bean:

public void copy(MyBean bean){
    setPropertyA(bean.getPropertyA());
    setPropertyB(bean.getPropertyB());
    [..]
}
如果您有一个具有很多属性的bean,那么这很容易出错,并且需要编写很多内容

我想通过反射来实现这一点,但我无法将一个对象的getter连接到另一个对象的setter

public List<Method> getAllGetters(Object object){
    List<Method> result = new ArrayList<>();
    for (final PropertyDescriptor propertyDescriptor : Introspector.getBeanInfo(object.getClass()).getPropertyDescriptors()) {
    result.add(readMethod = propertyDescriptor.getReadMethod());
    }
    return result;
}
一切如期

考虑使用或。它们都有一个copyProperties方法,可以实现您想要的功能


这也是可以想象的,这将得到你需要的结果。请务必查看Javadoc,以便了解其局限性。

如果您想手动执行此操作,我建议使用所谓的序列化副本。一个限制是bean最容易实现可序列化接口。正如您所说,可以使用反射来完成,但是您可能会有更多的不便。
希望有帮助。

反射是防错的吗?@gurvindersingh,谢谢你的宝贵评论。我在一些项目中使用了和。然而,我会选择手动制图器。这并不难,也不容易出错。这些工具Orika和Dozer要么需要配置,要么使您的代码依赖于任意约定,尽管它们有帮助,但我认为为此付出的代价非常高。这在这里并不适用。序列化复制是一种克隆/深度复制策略。它不适用于将一个对象复制到另一个不同类的对象。小海狸,或者用反射来滚动你自己的,是合适的选择。序列化副本在这里开始有用的唯一方法是定义一个具有公共成员的新bean,使其成为两个bean的成员,并委托getter和setter来维护当前的简单bean接口。那就可以复制了。但这比需要的更复杂。
 BeanUtils.copyProperties(this, anotherBean);