簡體   English   中英

Java 中基於條件的生成器

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM