數值如果我有一顆豆,如如何「合併」兩種豆,但總結裏面
public class SimpleBean
{
private String name;
private int int1;
private int int2;
private double double1;
private double double2;
// getters/setters snipped
}
什麼是bean的兩個實例合併爲一個,在這裏我們只是想最好的辦法將第二個bean實例的數值添加到第一個(即我們不關心上面的字符串'名稱')
我已經想出了使用PropertyUtils的以下解決方案,但我認爲它可能不是最好
public void mergeStats(Object stat)
{
try
{
Map<String, Object> beanMap = PropertyUtils.describe(stat);
// Remove ones we don't want to merge
beanMap.remove("name");
beanMap.remove("class");
for (Map.Entry<String, Object> entry:beanMap.entrySet())
{
String key = entry.getKey();
Number value = (Number) entry.getValue();
Number existingValue = (Number) PropertyUtils.getProperty(this, key);
BeanUtils.setProperty(this, key, existingValue.doubleValue() + value.doubleValue());
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
編輯:我還補充一點,我們的項目真正的豆含有大約100個整數&雙打,並隨着業務需求的改變那些可以隨時間而改變。維護一個按名稱處理每個函數的函數並不太吸引人。
爲什麼的BeanUtils/PropertyUtils灰心?這是性能的原因?我之所以把它當作第一遍使用,是因爲它的靈活性。我可以添加/刪除int/double字段,而不必修改合併函數。 – 2012-03-16 20:14:47
@CollinPeters如果屬性必須手動添加反正,有一個在它添加到求和函數沒有大的工作。我不鼓勵BeanUtils,因爲它們給代碼帶來了不確定性。如果我是你,我把它倒過來:我會寫所有的代碼** **明確,但我會用BeanUtils的檢查,如果所有的號碼屬性總結寫**單元測試** 。 – MaDa 2012-03-18 20:27:33
是砰的一聲。混凝土類應該有每場宣佈,單元測試應該使用的BeanUtils – 2012-03-20 00:11:52