【发布时间】: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. 该字段可能应该是最终的,因为您可以通过修改集合而不是替换它来完成所有操作。
标签: java lombok java-annotations