如何制作数据 lombok return 深拷贝 getter 方法

How to make Data lombok return deep copys of getter method

Spotbugs 发出以下错误警告:

[ERROR] Medium:MetaData.getCreatedAt() 可能会通过 returning MetaData.createdAt [...MetaData] At MetaData.java:[line 21] 公开内部表示EI_EXPOSE_REP

为了解决这个问题,我想我必须return“createdAt”的深层副本。

有直接用@Data解决这个问题的方法吗?

没有,有none。原因是每个 class 创建防御副本是不同的,最好的方法取决于您的用例。 Lombok 无法知道您想要什么或需要什么。

例如,考虑一个带有可修改列表的可变 class 作为字段,即列表内容可能会与 getList() 调用同时更改。在某些情况下,return 和 Collections.unmodifiableList() 将反映可能同时发生的列表更改可能是合理的。在其他情况下,return 一个永不改变的列表可能会更好,例如通过 List.copyOf() 创建列表的真实副本。 此外,如果列表中的对象也是可变的,您可能也想 clone/copy 那些对象。

所以如果你想return一个防御副本,你必须手动实现getter。