[英]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.