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

Lombok Builder如何实现任意字段非空才构建对象否则不构建

问题背景

Java开发中使用Lombok @Builder构建InterestLimit对象时,需要实现如下校验规则:

  • 任意一个字段为非null值时,正常构建对象
  • 所有字段均为null时,不生成对象

初始类定义如下:

@Builder
public class InterestLimit{
    String field1;
    String field2;
}
实现方式

Lombok的@Builder注解在编译期生成代码时,不会覆盖开发者手动在Builder静态内部类中定义的方法,利用这个特性我们可以直接在自定义的build()方法中插入校验逻辑,不需要改动原有@Builder的使用习惯。

完整代码示例

@Builder
public class InterestLimit{
    String field1;
    String field2;

    public static class InterestLimitBuilder {
        public InterestLimit build() {
            // 所有字段均为null时的处理逻辑,可根据业务需求选择
            if (field1 == null && field2 == null) {
                // 选项1:抛出异常,阻断非法对象构建
                throw new IllegalArgumentException("InterestLimit至少需要一个非空字段");
                // 选项2:直接返回null,不创建对象
                // return null;
            }
            return new InterestLimit(field1, field2);
        }
    }
}

注意点

  • 原有链式构建的写法完全不受影响,比如InterestLimit.builder().field1("test").build()可以正常使用
  • 这种写法不需要额外引入其他依赖,也不需要替换@Builder为其他注解,侵入性极低
  • 如果类字段较多不想手写每个字段的判空,可以在build方法里通过反射遍历InterestLimit的所有成员字段,统一判断是否全为null,减少重复代码
  • 如果业务上要求全空场景返回安全的空标识,也可以把返回值改为Optional<InterestLimit>,全空时返回Optional.empty(),降低空指针风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:18:23