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

子类继承含@Builder注解的不可修改父类,实现Builder模式报错求助

解决子类继承带@Builder的第三方父类时的Builder模式实现问题

当父类来自依赖包且标注了@Builder(无法修改),直接在子类使用@Builder或@SuperBuilder会报错——这是因为Lombok的@Builder原生不支持继承,而@SuperBuilder要求父类也必须使用@SuperBuilder注解,两者元数据不兼容。

下面是两种可行的解决方案:

方案一:手动编写子类Builder(推荐)

复用父类自动生成的Builder,扩展子类属性的构建逻辑,示例如下:

第三方父类(不可修改)

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class Parent {
    private final String parentField;
}

子类实现自定义Builder

import lombok.Getter;

@Getter
public class Child extends Parent {
    private final String childField;

    // 通过父类实例初始化子类
    private Child(Parent parent, String childField) {
        super(parent.getParentField());
        this.childField = childField;
    }

    // 对外暴露Builder入口
    public static ChildBuilder builder() {
        return new ChildBuilder();
    }

    // 子类Builder继承父类Builder
    public static class ChildBuilder extends Parent.ParentBuilder<ChildBuilder> {
        private String childField;

        // 添加子类属性的设置方法
        public ChildBuilder childField(String childField) {
            this.childField = childField;
            return this;
        }

        // 重写build方法,先构建父类实例,再创建子类实例
        @Override
        public Child build() {
            Parent parent = super.build();
            return new Child(parent, childField);
        }
    }
}

使用方式和普通Builder一致:

Child child = Child.builder()
        .parentField("父类属性")
        .childField("子类属性")
        .build();

方案二:借助Lombok的静态工厂方法+@Builder

如果父类构造器为公开(部分场景下@Builder生成的构造器可能为公开),可以直接通过静态工厂方法配合@Builder绕开继承冲突:

import lombok.Builder;
import lombok.Getter;

@Getter
public class Child extends Parent {
    private final String childField;

    // 公开构造器,供静态工厂方法调用
    private Child(String parentField, String childField) {
        super(parentField);
        this.childField = childField;
    }

    @Builder
    public static Child of(String parentField, String childField) {
        return new Child(parentField, childField);
    }
}

这种方式需要手动映射父类和子类的所有属性,适合属性较少的场景。


内容的提问来源于stack exchange,提问作者Sara Selim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:15:04