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

Lombok @SuperBuilder在抽象泛型父类编译报错问题求助

解决@SuperBuilder泛型类编译错误(类型参数数量不匹配)

问题分析

你的代码中自定义的EventFinderBuilder泛型声明与Lombok的@SuperBuilder生成逻辑不兼容:

  • 父类EventFinder是单泛型参数的抽象类,但自定义Builder的泛型边界用了EventFinder<?>,导致Lombok生成代码时无法正确匹配泛型参数数量。
  • 保留find()抽象方法时,Lombok需要更严格的泛型绑定,错误的Builder泛型声明直接触发了编译报错。

解决方案

修正自定义Builder的泛型参数,使其与父类泛型正确关联,让Lombok能识别完整的泛型结构:

修正后的代码

import lombok.SuperBuilder;
import lombok.extern.slf4j.Slf4j;
import java.util.List;

@Slf4j
@SuperBuilder
public abstract class EventFinder<EventType> {
    private final String accountId;

    public abstract List<EventType> find();

    // 调整Builder泛型声明,关联父类的EventType泛型
    public static abstract class EventFinderBuilder<EventType, C extends EventFinder<EventType>, B extends EventFinderBuilder<EventType, C, B>> {
        public B accountId(String accountId) {
            log.trace("Account ID: %s".formatted(accountId));
            this.accountId = accountId;
            return self();
        }
    }
}

关键改动说明

  1. 扩展Builder泛型参数:给EventFinderBuilder添加EventType泛型参数,与父类EventFinder<EventType>的泛型保持一致,解决Lombok生成代码时的泛型参数数量不匹配问题。
  2. 修正泛型边界:将C extends EventFinder<?>改为C extends EventFinder<EventType>,确保Builder构建的对象是正确泛型类型的EventFinder子类。
  3. 保留原有逻辑:自定义的accountId()方法日志逻辑完全保留,不影响Builder的链式构建功能。

验证

编译修正后的代码,@SuperBuilder可正常生效,find()抽象方法也能保留。子类继承EventFinder时,依然可以通过EventFinderBuilder链式构建对象,泛型类型会被正确推导。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:31:05