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

如何利用Lombok特性基于已有Parent实例构建Child实例(无需逐字段赋值)

如何利用Lombok特性基于已有Parent实例构建Child实例(无需逐字段赋值)

嘿,这个需求完全可以用Lombok的特性轻松搞定,根本不用手动逐字段赋值,我来给你一步步讲清楚怎么实现~

首先,你已经在Parent和Child类上都加了@SuperBuilder(toBuilder = true),这个注解就是关键!它本身就支持父类与子类的builder继承,能自动帮你把父类的字段值传递过去。

方法一:直接用Child的builder结合parent()方法

Lombok的@SuperBuilder会自动在Child的Builder类中生成一个parent(Parent parent)方法,这个方法会把传入的Parent实例的所有字段值,一键复制到Child Builder对应的父类字段里。

举个实际的代码例子:
首先你有一个已初始化的Parent实例:

Parent existingParent = Parent.builder()
    .id("PARENT_001")
    .field1(100L)
    .field2(200L)
    .field3(300L)
    .build();

然后直接用这个实例构建Child,同时补充子类属性:

Child child = Child.builder()
    .parent(existingParent) // 这一步就把Parent的所有字段都填好了
    .prop1(10)
    .prop2(20)
    .prop3(30)
    .build();

这样就搞定了,完全不用手动写field1(existingParent.getField1())这种重复代码!

方法二:自定义fromParent静态方法,贴合你想要的语法

如果你更偏好Child.fromParent(parent).prop1(10).build()这种更直观的写法,也可以在Child类里加一个简单的静态方法,复用Lombok生成的builder:

@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class Child extends Parent {
    private Integer prop1;
    private Integer prop2;
    private Integer prop3;

    // 新增这个静态方法
    public static ChildBuilder<?, ?> fromParent(Parent parent) {
        return Child.builder().parent(parent);
    }
}

现在你就可以用你最开始想要的写法了:

Child child = Child.fromParent(existingParent)
    .prop1(10)
    .prop2(20)
    .build();

注意事项

  • 确保你的Lombok版本不低于1.18.2,因为@SuperBuilder是从这个版本开始正式支持的
  • 要保证IDE的Lombok插件已经启用,并且项目的maven/gradle依赖配置正确,不然可能会出现IDE提示错误但编译正常的情况

备注:内容来源于stack exchange,提问作者Ricardo Henrique Comar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:04:29