Java Lombok@Builder.Default是';如果要设置null,则不能为@Value对象工作
我正在尝试获取将默认值设置为所有空字段的不可变对象。 因此,我的目标是:Java Lombok@Builder.Default是';如果要设置null,则不能为@Value对象工作,java,lombok,Java,Lombok,我正在尝试获取将默认值设置为所有空字段的不可变对象。 因此,我的目标是: import lombok.Builder; import lombok.Value; @Value @Builder public class Test { @Builder.Default String name = "default"; } 我希望这两项测试能够通过: assert Test.builder().build().name == "default&quo
import lombok.Builder;
import lombok.Value;
@Value
@Builder
public class Test {
@Builder.Default
String name = "default";
}
我希望这两项测试能够通过:
assert Test.builder().build().name == "default"
assert Test.builder().name(null).build().name == "default"
但第二个没有通过
在这种情况下,我如何告诉lombok不要设置实际为null?
我有来自另一个服务的值,它可以为空。如果默认值为空,我想使用它。Lombok的
@Builder。默认值
会记住是否调用了相应的Builder setter方法。这允许显式覆盖默认值,即使null
。没有“取消设置”值的内置方法
有两种方法可以解决此问题:
name
中删除默认值和@Builder.default
。然后手动实现一个all args构造函数,该构造函数检查参数name
是否为null
,并在这种情况下指定默认值
null
将其取消设置:
我建议您使用后一种方法,因为这样您就不必每次在该类中添加或删除字段时都修改手动的all args构造函数。实际上,如果传递null,则默认值不起作用,这是无效的expected@User-Upvotedon'tsayThanks好的,那么我的问题怎么解决呢?你就不能不叫
名字吗(空)
,当你不想name
成为null
?我知道这不是你想要的,但对我来说是有意义的。
public static class TestBuilder {
public TestBuilder name(String name) {
this.name$value = name;
this.name$set = name != null;
return this;
}
}