如何抑制龙目岛警告
Posted
技术标签:
【中文标题】如何抑制龙目岛警告【英文标题】:How to suppress lombok warnings 【发布时间】:2018-02-13 21:22:24 【问题描述】:我有一个实体
@Builder
class MyEntity
private Set<OtherEntitiy> children = new HashSet<>()
我收到了龙目岛警告。
警告:@Builder 将完全忽略初始化表达式。如果您希望初始化表达式用作默认值,请添加 @Builder.Default。如果在构建期间它不应该是可设置的,则将字段设置为最终字段。 Set = new HashSet();
问题是:如何抑制 lombok 的警告?
还有。我需要初始化孩子,因为我想避免 NullPointerException。我也不能将此文件标记为最终文件,因为它真的不是最终文件。我不能标记归档@Builder.Default
,因为我不仅想使用构建器创建这个实体,而且我想为其他构造器保存默认值。
【问题讨论】:
我认为 Lombok 试图告诉您它总是会覆盖该值。 github.com/rzwitserloot/lombok/issues/916 我不太了解 Lombok,但解决方法可能是使用@Builder
而不是类来定位构造函数。
我认为该警告是不言自明的,您应该考虑按照消息中的建议修复警告,而不是试图压制它。
@dpr 你是对的。首先我们需要考虑如何解决这个问题。但在这种情况下,建议的决定是不可接受的。我在上面的问题中已经解释过了。
只是一些想法:1.您可以添加@AllArgsConstructor(access=AccessLevel.PRIVATE)
并删除初始化。 Builder 将进行初始化,您不会称您为私有 ctor。 +++ 2. 你也许可以使用@Singular
。 +++ 3. 该字段可能应该是最终的,因为您可以通过修改集合而不是替换它来完成所有操作。
【参考方案1】:
使用
@Builder.Default
为您的Builder
添加默认行为
@Builder
class MyEntity
@Builder.Default
private Set<String> children = new HashSet<>();
您在定义了默认值的字段上使用它,Lombok
然后将在对象创建期间获取该值@Builder.Default
功能已添加到 lombok v1.16.16.
因此,如果您使用的是较低版本的Lombok
,您将无法使用它。
【讨论】:
当 OP 说“我不能标记归档 @Builder.Default 因为...”时,这怎么可能是公认的答案? 在 v1.16.16 中有一个已知问题/错误。这是链接:github.com/rzwitserloot/lombok/issues/1347。这个注释从字段声明中删除了默认初始化,如果你有它,它会破坏无参数构造函数,因为使用它不会再初始化字段。 关于使用 Builder.Default 的潜在问题的附加信息:***.com/questions/47883931/… @tomosius 而且它还是坏了。如果需要任何其他构造函数(例如用于 JSON 反序列化),则 Builder.Default 将不可用。以上是关于如何抑制龙目岛警告的主要内容,如果未能解决你的问题,请参考以下文章