lombok @Data生成的setter是否对成员对象(如地图)执行深度复制?

时间:2017-04-11 19:01:35

标签: java lombok

我找不到任何关于lombok是否生成执行克隆的setter或者像list / maps这样的容器参数的深层副本的文档。有人可以证实吗?

lombok Getter/Setter

1 个答案:

答案 0 :(得分:1)

运行快速测试表明没有进行深度复制(正如预期的那样,因为可靠地深度复制任何可能类型的变量将非常困难/不可能(?)工作完美)。

龙目岛上课

@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.";

请注意,这些断言全部通过,因此很明显副本是简单的对象引用而不是深层副本。