如何在多类继承层级下结合自定义builder使用Lombok @SuperBuilder
报错根本原因
@SuperBuilder 处理类继承结构时,会为每一个层级的类自动生成对应的抽象Builder类,且子类Builder默认继承父类的Builder以实现链式调用的继承。你手动自定义了Parent2的静态内部Builder类,但没有显式声明继承Parent1生成的Parent1Builder,Lombok不会自动补全这个继承关系,导致Builder层级断裂,注解自动生成的方法无法匹配到父类的对应方法,就抛出了「方法未重写或实现父类方法」的编译错误。
你另一套没有自定义Builder的同结构代码能正常编译,是因为无自定义Builder时Lombok会自动完成Builder的继承关联,不需要手动干预。
解决方案
给你自定义的Parent2Builder显式加上对Parent1Builder的继承,正确传递泛型参数即可,修改后的Parent2代码如下:
@Data @SuperBuilder public abstract class Parent2 extends Parent1 { String name; // 自定义Builder显式继承Parent1的Builder类,正确传递泛型 public abstract static class Parent2Builder<C extends Parent2, B extends Parent2Builder<C, B>> extends Parent1.Parent1Builder<C, B> { // 原有自定义Builder的逻辑保持不变 } }
额外注意事项
- 确保继承链上所有类都标注了
@SuperBuilder,不能出现父类用@Builder、子类用@SuperBuilder的情况 - 如果自定义Builder中新增了自定义方法,注意方法名、返回值不要和Lombok自动生成的Builder方法冲突
- 若修改后仍有报错,可先执行
clean清空编译缓存,Lombok增量编译偶尔会出现缓存异常导致报错
内容的提问来源于stack exchange,提问作者Eligos
相关产品推荐
相关产品推荐

