[英]Condition based builder in Java
我有一个字段需要检查。 如果该字段匹配,则将其提交给构建器,如果不匹配,则不要将其提交给构建器。
@Data
@Builder
public class UserSchool {
private final Long UserId;
private final String school;
private final Optional<String> lunch;
}
我需要检查用户是否属于“高中”,然后将参数 lunch 添加到构建器。 如果用户不属于“高中”,请不要向构建器添加参数。
if(user.school.name().equals(School.high_school.name())){
Deposit.builder()
.lunch(request.getLounchName());
}
UserSchool userSchool = UserSchool.builder()
.UserId(Long.valueOf(user.UserId.id))
.school(request.getUserSchool())
.build();
我在上面提出了这段代码,午餐参数是null
,尽管它应该在那里。
当我在没有 if 语句的情况下将它添加到构建器时:
UserSchool userSchool = UserSchool.builder()
.UserId(Long.valueOf(user.UserId.id))
.school(request.getUserSchool())
.lunch(request.getLounchName())
.build();
它有效,但我需要能够检查条件。 我错过了什么?
您不应该使用 Optional 类型作为 class 字段,通常只返回类型或包装器到可为 null 的返回类型。
不过,如果我理解这个问题,你正在寻找这个
UserSchool.Builder builder = UserSchool.builder()
.UserId(Long.valueOf(user.UserId.id))
.school(request.getUserSchool());
if (condition) {
builder.lunch(..);
}
UserSchool userSchool = builder.build();
或者
String lunch = condition ? "some value" : null;
UserSchool.Builder builder = UserSchool.builder()
.UserId(Long.valueOf(user.UserId.id))
.lunch(lunch)
.school(request.getUserSchool())
.build();
或者干脆给 class 添加一个方法,不要使用可为空的字段
public Optional<String> getLunch() {
return condition ? Optional.of("some value") : Optional.empty();
}
构建器之前的 if 语句的问题是您使用了其他构建器,但从未捕获其返回值以供以后使用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.