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

如何为Lombok Builder添加枚举值额外校验?

解决Lombok Builder限制枚举字段取值的简便方法

针对你的需求,不需要完全自定义Builder或者复杂的自定义注解,有两种简便的实现方式:

方法一:通过全参构造器加入校验逻辑

Lombok的@Builder生成的Builder类,最终会调用目标类的全参构造器创建实例。因此只需手动编写带校验逻辑的全参构造器,就能在build()时自动触发校验:

@Builder(toBuilder = true)
public class Testing {

    @NonNull private String id;
    @NonNull private TestEnum test;
    private String message;

    // 手动实现全参构造器,加入test字段的取值限制
    public Testing(@NonNull String id, @NonNull TestEnum test, String message) {
        this.id = id;
        // 校验test只能是ALPHA或BETA
        if (!(test == TestEnum.ALPHA || test == TestEnum.BETA)) {
            throw new IllegalArgumentException("test字段仅允许取值ALPHA或BETA");
        }
        this.test = test;
        this.message = message;
    }
}

当使用Builder传入TestEnum.GAMMA调用build()时,会直接抛出IllegalArgumentException,阻断非法实例的创建。

方法二:重写Builder的test方法

如果只想针对test字段的设置过程做校验,可以重写Builder类中的test()方法,在赋值前加入校验:

@Builder(toBuilder = true)
public class Testing {

    @NonNull private String id;
    @NonNull private TestEnum test;
    private String message;

    // 重写Builder的test方法,加入校验逻辑
    public static class TestingBuilder {
        public TestingBuilder test(TestEnum test) {
            if (!(test == TestEnum.ALPHA || test == TestEnum.BETA)) {
                throw new IllegalArgumentException("test字段仅允许取值ALPHA或BETA");
            }
            this.test = test;
            return this;
        }
    }
}

这种方式更精准,仅在设置test字段时触发校验,Lombok会自动生成Builder的其他方法,无需手动实现完整Builder。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:17:18