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

Lombok @With克隆时父类继承字段为null,如何配置才能正常工作?

Lombok @With注解继承父类字段为空问题解决

问题根因

@With注解的默认工作逻辑决定了该问题的出现:

  • @With生成的字段修改方法,会调用当前类的全参构造器实例化新对象,默认仅会复制当前类定义的字段值,不会主动处理父类继承的字段
  • 你给Employee类添加的@AllArgsConstructor注解,仅会生成包含子类自有字段id的构造方法,调用withId生成新对象时,只会给新对象的id字段赋值,父类的name、age字段没有被传递赋值,因此返回null。

兼容说明

这种子类继承父类字段的场景,Lombok @With 原生默认不支持,需要调整代码适配。

修复方案

方案1:手动定义包含父类字段的全参构造(首选,兼容性最高)

删除Employee类上的@AllArgsConstructor注解,手动编写包含父类字段的全参构造,同时将@Builder注解加在该构造方法上,@With会自动识别该构造方法完成所有字段的复制:

@NoArgsConstructor
@With
@Getter
class Employee extends Person {
    protected String id;
    
    // 手动编写包含父类字段的全参构造,同时承载Builder逻辑
    @Builder
    public Employee(String name, Integer age, String id) {
        super(name, age);
        this.id = id;
    }
}

调整后调用withId方法时,会自动把原对象的name、age、原有id传入构造器,仅替换你指定的新id值,父类字段就不会再为空。

方案2:高版本Lombok适配(Lombok 1.18.24及以上版本支持)

如果项目允许升级Lombok版本,可以给父类和子类都添加@SuperBuilder注解,配合@With使用,同时删除子类上的@AllArgsConstructor注解,也可以实现父类字段的自动复制。


内容的提问来源于stack exchange,提问作者Psycho Punch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:45:04