Java 中基于条件的生成器
Condition based builder in Java
我有一个字段需要检查。如果字段匹配,则将其提交给构建器,如果不匹配,则不要将其提交给构建器。
@Data
@Builder
public class UserSchool {
private final Long UserId;
private final String school;
private final Optional<String> lunch;
}
我需要检查用户是否属于“high school”,然后将参数 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();
它有效,但我需要能够检查条件。
我错过了什么?
您不应将可选类型用作 class 字段,通常只能使用 return 类型或可空 return 类型的包装器。
不过,如果我理解这个问题,那么您正在寻找这个
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 添加一个方法,而不是使用可为 null 的字段
public Optional<String> getLunch() {
return condition ? Optional.of("some value") : Optional.empty();
}
构建器之前的 if 语句的问题是您使用了其他构建器,但从未捕获其 return 值以供稍后使用
我有一个字段需要检查。如果字段匹配,则将其提交给构建器,如果不匹配,则不要将其提交给构建器。
@Data
@Builder
public class UserSchool {
private final Long UserId;
private final String school;
private final Optional<String> lunch;
}
我需要检查用户是否属于“high school”,然后将参数 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();
它有效,但我需要能够检查条件。 我错过了什么?
您不应将可选类型用作 class 字段,通常只能使用 return 类型或可空 return 类型的包装器。
不过,如果我理解这个问题,那么您正在寻找这个
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 添加一个方法,而不是使用可为 null 的字段
public Optional<String> getLunch() {
return condition ? Optional.of("some value") : Optional.empty();
}
构建器之前的 if 语句的问题是您使用了其他构建器,但从未捕获其 return 值以供稍后使用