Lombok 中带有@Builder 或@Getter 注释的默认字段值
Default field value with @Builder or @Getter annotation in Lombok
我正在使用 Lombok @Builder
注释,但我希望某些 String
字段是可选的并且默认为 ""
以避免 NPE。是否有捷径可寻?我找不到任何东西。
或者,如果变量是 null
.
,则可以将 @Getter
自定义为 return 默认值
您必须提供构建器 class,如下所示:
@Builder
public class XYZ {
private String x;
private String y;
private String z;
private static class XYZBuilder {
private String x = "X";
private String y = "Y";
private String z = "Z";
}
}
那么 x
、y
、z
的默认值将是 "X"
、"Y"
、"Z"
.
另一种方法是使用 @Builder(toBuilder = true)
@Builder(toBuilder = true)
public class XYZ {
private String x = "X";
private String y = "Y";
private String z = "Z";
}
然后按如下方式使用它:
new XYZ().toBuilder().build();
相对于,这种方法对class重命名不太敏感。如果重命名 XYZ
但忘记重命名内部静态 class XYZBuilder
,那么魔法就消失了!
完全取决于您使用自己更喜欢的方法。
从版本 v1.16.16
开始,他们添加了 @Builder.Default
。
@Builder.Default
lets you configure default values for your fields
when using @Builder
.
示例:
@Setter
@Getter
@Builder
public class MyData {
private Long id;
private String name;
@Builder.Default
private Status status = Status.NEW;
}
PS: 很高兴他们还添加了警告,以防你没有使用 @Builder.Default
.
Warning:(35, 22) java: @Builder will ignore the initializing
expression entirely. If you want the initializing expression to serve
as default, add @Builder.Default. If it is not supposed to be settable
during building, make the field final.
我正在使用 Lombok @Builder
注释,但我希望某些 String
字段是可选的并且默认为 ""
以避免 NPE。是否有捷径可寻?我找不到任何东西。
或者,如果变量是 null
.
@Getter
自定义为 return 默认值
您必须提供构建器 class,如下所示:
@Builder
public class XYZ {
private String x;
private String y;
private String z;
private static class XYZBuilder {
private String x = "X";
private String y = "Y";
private String z = "Z";
}
}
那么 x
、y
、z
的默认值将是 "X"
、"Y"
、"Z"
.
另一种方法是使用 @Builder(toBuilder = true)
@Builder(toBuilder = true)
public class XYZ {
private String x = "X";
private String y = "Y";
private String z = "Z";
}
然后按如下方式使用它:
new XYZ().toBuilder().build();
相对于XYZ
但忘记重命名内部静态 class XYZBuilder
,那么魔法就消失了!
完全取决于您使用自己更喜欢的方法。
从版本 v1.16.16
开始,他们添加了 @Builder.Default
。
@Builder.Default
lets you configure default values for your fields when using@Builder
.
示例:
@Setter
@Getter
@Builder
public class MyData {
private Long id;
private String name;
@Builder.Default
private Status status = Status.NEW;
}
PS: 很高兴他们还添加了警告,以防你没有使用 @Builder.Default
.
Warning:(35, 22) java: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.