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

Java Builder模式中如何根据条件动态包含/排除属性?

根据列表是否为空动态构建QuoteDetails对象

可行性结论

完全可行,Builder模式本身就支持条件式配置属性,只需在构建过程中对penalties列表做非空判断,选择性调用对应的Setter方法即可。

具体实现代码

public static QuoteDetails quoteDetailsForMA(String response) {
  handleErrors(response);
  try {
    FullResponse quoteDetails = extractResponse(response);
    Summary summary = summaryMA(quoteDetails);
    List<PenaltyElement> penalties = retrievePenalties(quoteDetails);
    
    // 先初始化Builder并设置必选属性
    QuoteDetails.Builder builder = QuoteDetails.builder()
        .priceSummary(summary);
    
    // 仅当penalties非空时,配置该属性
    if (!penalties.isEmpty()) {
        builder.penalties(penalties);
    }
    
    return builder.build();
  } catch (Exception e) {
    LOGGER.error("Exception thrown response: {}", e.getMessage());
    // 注意:原方法此处缺少返回值,编译会报错,需补充返回逻辑(示例返回null,也可抛出RuntimeException)
    return null;
  }
}

补充说明

  1. 分步构建Builder是最直观的实现方式,逻辑清晰易维护;
  2. 原代码的catch块没有返回值,属于编译错误,必须补充返回逻辑或抛出未检查异常;
  3. 若你的Builder类支持链式调用的条件扩展(比如结合Optional),也可以用更简洁的写法,但分步判断的兼容性和可读性最优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:15:42