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

使用Lombok @SuperBuilder创建可抛异常默认构造方法遇阻求助

问题分析与解决方案

这确实是Lombok 1.18.32版本的功能限制——@SuperBuilder无法自动适配抛出checked异常的手动构造器,目前也没有官方配置项能直接解决这个问题。

报错原因

当你给手动定义的构造器添加throws Exception(checked异常)声明后,Lombok生成的builder代码(尤其是toBuilder()相关逻辑)会直接调用这个构造器,但生成的代码里并没有处理该checked异常的逻辑(既没有添加throws声明,也没有try-catch包裹),因此编译器会抛出"unreported exception Exception"的错误。

可行替代方案

  • 改用Unchecked Exception
    把构造器的异常声明改为抛出RuntimeException或其子类(比如自定义业务异常),这样不需要在调用处显式处理,Lombok生成的代码也能正常编译。示例:

    @SuperBuilder(toBuilder = true)
    private class SomeBuilderBase {
        private final String someString;
        
        protected SomeBuilderBase(SomeBuilderBaseBuilder<?,?> b) throws IllegalArgumentException {
            someString = b.someString;
            if (someString == null || someString.isBlank()) {
                throw new IllegalArgumentException("someString不能为空");
            }
        }
    }
    
  • 手动维护Builder代码(优化版)
    如果你必须使用checked异常,只能继续手动编写相关builder逻辑,但可以通过以下方式降低维护成本:

    • 用@Generated注解标记手动生成的builder类,避免IDE的冗余提示;
    • 将构造器中的校验逻辑抽成独立方法,减少重复代码;
    • 每次修改类成员后,对比Lombok自动生成的代码差异,同步更新手动代码。

关于版本升级

目前Lombok官方尚未针对@SuperBuilder添加支持构造器抛出checked异常的功能,升级到最新稳定版(如1.18.36)也无法解决该问题,只能持续关注官方issue的更新。

内容的提问来源于stack exchange,提问作者Andreas Forslöw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:52:46