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(); } } }
关键改动说明
- 扩展Builder泛型参数:给
EventFinderBuilder添加EventType泛型参数,与父类EventFinder<EventType>的泛型保持一致,解决Lombok生成代码时的泛型参数数量不匹配问题。 - 修正泛型边界:将
C extends EventFinder<?>改为C extends EventFinder<EventType>,确保Builder构建的对象是正确泛型类型的EventFinder子类。 - 保留原有逻辑:自定义的
accountId()方法日志逻辑完全保留,不影响Builder的链式构建功能。
验证
编译修正后的代码,@SuperBuilder可正常生效,find()抽象方法也能保留。子类继承EventFinder时,依然可以通过EventFinderBuilder链式构建对象,泛型类型会被正确推导。
内容的提问来源于stack exchange,提问作者Kfir Doron
相关产品推荐
相关产品推荐

