lombok @Data 生成的设置器是否对地图等成员对象执行深度复制?
Does lombok @Data generated setters perform deepcopy to member objects like maps?
我找不到任何关于 lombok 是否生成执行容器参数克隆或深度复制的 setter 的文档,如 lists/maps。有人可以确认吗?
运行 快速测试表明没有进行深度复制(正如预期的那样,真的,因为可靠地深度复制 any 可能类型的变量将是相当 difficult/impossible(?) 才能完美工作)。
龙目岛class
@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.";
注意这些断言都通过了,所以很明显这个拷贝是简单的对象引用而不是深拷贝。
我找不到任何关于 lombok 是否生成执行容器参数克隆或深度复制的 setter 的文档,如 lists/maps。有人可以确认吗?
运行 快速测试表明没有进行深度复制(正如预期的那样,真的,因为可靠地深度复制 any 可能类型的变量将是相当 difficult/impossible(?) 才能完美工作)。
龙目岛class
@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.";
注意这些断言都通过了,所以很明显这个拷贝是简单的对象引用而不是深拷贝。