2016-12-04 30 views
2

我想所有屬性從一個豆複製到另一個:有效的方式,所有的bean的屬性複製到另一個豆

public void copy(MyBean bean){ 
    setPropertyA(bean.getPropertyA()); 
    setPropertyB(bean.getPropertyB()); 
    [..] 
} 

這是容易出錯,如果你有一顆豆,有很多很多寫屬性。

我正在考慮反射來做到這一點,但是我不能將吸氣劑從一個物體「連接」到另一個物體的吸氣劑。

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; 
} 

編輯:正如預期

BeanUtils.copyProperties(this, anotherBean); 

作品!

+0

而反射是錯誤的? – GurV

+1

@GurwinderSingh,感謝您的寶貴意見。 – kerner1000

+0

我在一些項目中使用了[Orika](http://orika-mapper.github.io/orika-docs/intro.html)和[Dozer](https://github.com/DozerMapper/dozer)。但是,我會去手動映射器。這並不困難,也不是那種容易出錯的。這些工具(Orika和Dozer)要麼需要配置,要麼使代碼依賴於任意的約定,雖然它們有幫助,但我認爲付出的代價非常高。 –

回答

-1

如果你想這樣做手動我建議使用什麼叫「序列化複製」。一個限制是bean最實現Serializable接口。正如你所說,它可以用反射來完成,但你可能會有更多的不便。 希望得到這個幫助。

+0

這並不適用於此。序列化副本是克隆/深度複製的策略。它不適用於取一個對象並將其複製到另一個不同的類。 BeanUtils或者用反射來滾動你自己,是合適的選擇。序列化副本在這裏唯一有用的方法是,如果定義了一個具有公共成員的新bean,並將其作爲這兩個bean的成員,並將getter和setter委託給它以維護當前簡單的bean接口。然後可以複製。但是這比需要更復雜。 –

相關問題