Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java lombok@Data generated setters是否对成员对象(如映射)执行深度复制?_Java_Lombok - Fatal编程技术网

Java lombok@Data generated setters是否对成员对象(如映射)执行深度复制?

Java lombok@Data generated setters是否对成员对象(如映射)执行深度复制?,java,lombok,Java,Lombok,我找不到任何关于lombok是否生成执行容器参数(如列表/映射)的克隆或深度复制的setter的文档。有人能证实吗 运行快速测试表明没有进行深度复制(正如预期的那样,实际上,因为可靠地深度复制任何可能类型的变量都很难/不可能(?)完美工作) 龙目班 @Data public class Foo { private Map<Object, Object> bar; } @数据 公开课Foo{ 私人地图栏; } 以及测试 Foo foo = new Foo(); Map<

我找不到任何关于lombok是否生成执行容器参数(如列表/映射)的克隆或深度复制的setter的文档。有人能证实吗


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

龙目班

@Data
public class Foo {
    private Map<Object, Object> bar;
}
@数据
公开课Foo{
私人地图栏;
}
以及测试

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.";
Foo-Foo=new-Foo();
映射栏=新的HashMap();
foo.立根节(bar);
律师公会(“foo”、“bar”);
assert foo.getBar()==bar:“getBar()和bar不共享相同的内存位置(不是相同的对象)”;
assert foo.getBar().get(“foo”).equals(“bar”):“在setBar(…)调用之后,对put(…)的调用不会持久化。”;

请注意,这些断言都通过了,因此很明显,副本是一个简单的对象引用,而不是一个深度副本。

这难道不足以简单地进行测试吗?@CollinD可能适合您,但最好回答如何测试它,并向正在学习的其他人显示测试结果吗?我同意@CollinD,编写测试或使用IDE的“delombok”功能更快我投票将此问题作为离题题题结束,因为OP可以自己确认答案为否。请参见和示例。