[英]Default Value for BigDecimal using Lombok Builder
让我们考虑以下实体:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class Audi extends Car {
private String name;
private String headquarter;
private BigDecimal revenue = BigDecimal.ZERO;
private BigDecimal totalAssets = BigDecimal.ZERO;
}
我想让所有 BigDecimal 变量都以 BigDecimal.ZERO 作为默认值。 如果我在声明后立即初始化它,
我收到这个警告:
@Builder 将完全忽略初始化表达式。 如果您希望初始化表达式作为默认值,请添加@Builder.Default。 如果在构建期间不应设置,请将字段设置为最终字段。
对于一个10/15 BigDecimal的Entity,每个字段都有这个注解就不太美观了。
还有其他选择吗?
正如迈克尔指出的那样,您没有太多其他选择。 如果您添加了@Builder
注释,则必须对每个字段使用@Builder.Default
才能使用流畅的构建器 API。
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class Audi extends Car {
private String name;
private String headquarter;
@Builder.Default
private BigDecimal revenue = BigDecimal.ZERO;
@Builder.Default
private BigDecimal totalAssets = BigDecimal.ZERO;
}
用法:
Audi audi = Audi.builder()
.name("Audi A3")
.headquarter("Germany")
.build();
System.out.println(audi);
Output:
Audi(name=Audi A3, headquarter=Germany, revenue=0, totalAssets=0)
如果不需要构建器功能,可以使用构造器以传统的Java
方式实例化对象。 但是,在这种情况下,应删除@Builder
注释,并且必须直接在构造函数中或在声明期间设置默认值。
@Data
@NoArgsConstructor
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class Audi extends Car {
@NonNull
private String name;
@NonNull
private String headquarter;
private BigDecimal revenue = BigDecimal.ZERO;
private BigDecimal totalAssets = BigDecimal.ZERO;
}
用法:
final Audi audi = new Audi("Audi A3", "Germany");
System.out.println(audi);
Output:
Audi(name=Audi A3, headquarter=Germany, revenue=0, totalAssets=0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.