当我修改BeanUtils.CopyProperties的目标对象时,源代码被修改



>我已经在

BeanUtils.CopyProperties(Src,Dest);
From : package org.springframework.beans;

现在在逻辑上更进一步,在迭代器的帮助下,我修改了 Dest 对象中的列表。

我希望 src 对象保持原样。

但我看到了一种奇怪的行为。我的 Src 也正在修改。

可能是什么原因?

例:src 和 Dest 有列表: [芒果, 苹果]

我在iteartor的帮助下从Dest中删除了芒果。

后来我看到
Src 有 [苹果]
Dest have [Apple]

是因为浅拷贝而发生的吗?

您不想复制List字段,而是在新复制的对象中克隆它。

BeanUtils.copyProperties(Object source, Object target)在其javadoc中没有明确说明,但它从一个对象到另一个对象的浅拷贝。

这意味着在target对象中,List字段将引用与source对象中的同一对象相同的对象。

因此,从一个或另一个对象修改List字段将反映在另一个对象中。

若要创建新的 List,应创建一个包含源List中实际元素的新 List 实例,并将其分配给目标对象中的List字段。

例如:

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

最新更新