当我修改 BeanUtils.CopyProperties 的目标对象时源被修改
Source getting modiefied when I modify target object of BeanUtils.CopyProperties
我在
的帮助下将一个对象复制到另一个对象中
BeanUtils.CopyProperties(Src,Dest);
From : package org.springframework.beans;
现在在逻辑上更进一步,在迭代器的帮助下,我修改了 Dest 对象中的列表。
我希望 src 对象保持原样。
但是我看到了一个奇怪的行为。
我的Src也被修改了。
可能是什么原因?
示例:
src 和 Dest 有列表:[Mango , Apple]
我在 iteartor 的帮助下从 Dest 中删除了 Mango。
稍后我看到
Src有[Apple]
目的地有[Apple]
是否因为浅拷贝而发生?
您不想复制 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);
我在
的帮助下将一个对象复制到另一个对象中BeanUtils.CopyProperties(Src,Dest);
From : package org.springframework.beans;
现在在逻辑上更进一步,在迭代器的帮助下,我修改了 Dest 对象中的列表。
我希望 src 对象保持原样。
但是我看到了一个奇怪的行为。 我的Src也被修改了。
可能是什么原因?
示例:
src 和 Dest 有列表:[Mango , Apple]
我在 iteartor 的帮助下从 Dest 中删除了 Mango。
稍后我看到
Src有[Apple]
目的地有[Apple]
是否因为浅拷贝而发生?
您不想复制 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);