1

我已经将一个对象复制到另一个对象中

BeanUtils.CopyProperties(Src,Dest);

From : package org.springframework.beans;

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

我希望 src 对象保持原样。

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

可能是什么原因?

示例: src 和 Dest 有列表:[Mango , Apple]

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

后来我看到
Src 有 [Apple]
Dest 有 [Apple]

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

4

1 回答 1

2

您不想复制该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);
于 2017-06-18T06:04:27.223 回答