我有一个对象
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
private int id;
private String nick;
private boolean isEmailConfirmed = true;
}
我用两种方式初始化它
UserInfo ui = new UserInfo();
UserInfo ui2 = UserInfo.builder().build();
System.out.println("ui: " + ui.isEmailConfirmed());
System.out.println("ui2: " + ui2.isEmailConfirmed());
这是输出
ui: true
ui2: false
似乎 builder 没有获得默认值。我在我的属性中添加 @Builder.Default
注释,我的对象现在看起来像这样
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
private int id;
private String nick;
@Builder.Default
private boolean isEmailConfirmed = true;
}
这是控制台输出
ui: false
ui2: true
我怎样才能让它们都成为 true
?
原文由 Vitalii 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的猜测是这是不可能的(没有删除代码)。但是你为什么不直接实现你需要的构造函数呢? Lombok 旨在让您的生活更轻松,如果 Lombok 无法正常工作,请以老式方式进行。
控制台输出:
更新
截至 01/2021, 此错误似乎已在 Lombok 中修复,至少对于生成的构造函数而言。请注意,当您混合
Builder.Default
和显式构造函数时,仍然 存在类似的问题。