我找不到任何关于龙目岛是否生成执行克隆或深层复制容器参数(如列表/映射(的 setter 的文档。有人可以确认吗?
龙目岛 吸盘手/二传手
运行快速测试表明没有进行深度复制(正如预期的那样,真的,因为可靠地深度复制任何可能类型的变量都非常困难/不可能(?(完美工作(。
龙目岛班
@Data
public class Foo {
private Map<Object, Object> bar;
}
并进行测试
Foo foo = new Foo();
Map<Object, Object> bar = new HashMap<>();
foo.setBar(bar);
bar.put("foo", "bar");
assert foo.getBar() == bar : "getBar() and bar do not share the same memory location (aren't the same object)";
assert foo.getBar().get("foo").equals("bar") : "Calls to put(...) aren't persisted after setBar(...) call.";
请注意,这些断言都通过了,因此很明显,副本是一个简单的对象引用,而不是深层副本。