2017-06-18 27 views
0

我已經在邏輯現在再複製一個對象到另一個與源獲取modiefied當我修改BeanUtils.CopyProperties

BeanUtils.CopyProperties(Src,Dest); 

From : package org.springframework.beans; 

幫助目標對象,用迭代器的幫助下,我修改目的地對象中的列表。

我想讓src對象保持原樣。

但我看到一個奇怪的行爲。 我的Src也正在修改。

可能是什麼原因?

例子: src和目的地有列表:芒果,蘋果]

我刪除芒果從目的地與iteartor的幫助。

後來我看到
Src的有[蘋果]
目的地有[蘋果]

是不是因爲淺拷貝發生了什麼?

+0

「後來我看到 Src的有[芒果] 目的地有[蘋果]」 你會說:「後來我看到 Src的有[蘋果] 目的地具有[蘋果] 「? – davidxxx

+0

是的,先生,我看到[蘋果]右 – VedX

回答

2

您不想複製List字段,但將其克隆到新複製的對象中。

BeanUtils.copyProperties(Object source, Object target)在其javadoc中沒有明確顯示,但是它從對象到另一個對象進行淺拷貝。

這意味着在target目的,List字段將引用相同的對象,其中一個在source對象。

因此,修改List字段從一個或另一個對象將反映在另一個。

要創建一個新的列表,你應該創建一個包含在源List實際元素的新列表實例,並將其目標對象分配給List領域。

例如:

MyObject source = ...; 
MyObject target = ...; 

BeanUtils.copyProperties(source, target); 
... 
List<String> newList = new ArrayList<>(source.getList()); 
target.setList(newList); 
+0

謝謝@davidxxx我明白這一定是因爲淺拷貝,你知道任何深拷貝方法? – VedX

+0

不客氣:)你可以用一個ArrayList構造函數手動完成,就像我的例子一樣。我正在編輯。 – davidxxx

+0

或者你會建議自定義方法嗎?如上 ? – VedX