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
相关产品推荐
相关产品推荐

