You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中基于条件使用Builder构造对象时参数缺失问题排查

错误原因
  • 你在if分支中创建的是Deposit类的Builder实例,和目标类UserSchool无关联,且该实例调用lunch方法后没有被保存,直接被丢弃
  • 最终构造UserSchool时使用的是全新的Builder实例,完全没有继承if分支里的赋值逻辑
  • 额外注意:UserSchool的lunch字段是Optional<String>类型,直接传入字符串会触发类型错误,需包装为Optional实例;代码中request.getLounchName大概率为拼写错误,正确应为request.getLunchName
正确实现方案

先持有Builder实例,满足条件时追加参数,最后统一构建对象:

// 初始化Builder,赋值通用参数
UserSchool.UserSchoolBuilder userSchoolBuilder = UserSchool.builder()
        .UserId(Long.valueOf(user.UserId.id))
        .school(request.getUserSchool());

// 满足条件时追加lunch参数
if (user.school.name().equals(School.high_school.name())) {
    userSchoolBuilder.lunch(Optional.ofNullable(request.getLunchName()));
}

// 构建最终对象
UserSchool userSchool = userSchoolBuilder.build();
可选优化

如果希望未赋值时lunch字段默认返回空的Optional而非null,可以给字段添加@Builder.Default注解指定默认值:

@Data
@Builder
public class UserSchool {
    private final Long UserId;
    private final String school;
    @Builder.Default
    private final Optional<String> lunch = Optional.empty();
}

内容的提问来源于stack exchange,提问作者user9347049

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:57:03