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

Lombok继承场景下@Builder无法解析builder()方法及@SuperBuilder适配问题

Lombok继承场景下@Builder无法解析builder()方法及@SuperBuilder适配问题

咱们先来拆解一下你遇到的核心问题:一是CardConfiguration类找不到builder()方法,二是改用@SuperBuilder后出现类型不匹配错误,而且要求完全不能修改Controller.java的代码,只能调整实体类。下面就一步步帮你搞定这些问题:


一、替换继承链类的@Builder为@SuperBuilder(解决builder()方法找不到的问题)

Lombok的普通@Builder注解天生不支持继承场景的Builder模式兼容,当你的类存在继承关系时,必须用专门为继承设计的@SuperBuilder注解。需要把继承链上的三个类全部替换注解,同时补充必要的构造注解:

1. 调整CardConfiguration类

把原来的@Getter @Setter @Builder替换为@Getter @Setter @SuperBuilder,再加上@NoArgsConstructor和@AllArgsConstructor(@SuperBuilder需要类有对应的构造方法支持,显式声明这两个注解可以避免和现有代码的构造方法冲突):

@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class CardConfiguration {
    private String carId;
    private String carPassword;
    private List<CardType> cardType;
    // 这里要修改字段类型,看下面的类型匹配调整
    private List<CardType> cardTypes; // 原来的是List<ProcessingAccountDto.CardType>,现在改成和Controller匹配的类型

    // 原来的显式无参构造可以删掉,因为@NoArgsConstructor已经自动生成了
}

2. 调整ProcessingAccountDto类

同样把@Builder替换为@SuperBuilder,补充@NoArgsConstructor和@AllArgsConstructor。这个类继承了CardConfiguration,@SuperBuilder会自动处理父类的字段,不需要额外配置:

@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class ProcessingAccountDto extends CardConfiguration {
    private String id;
    public String type;
    @JsonProperty("sourceAuthority")
    private SourceAuthority sourceAuthority;
    private CardConfiguration cardConfiguration;
    private List<CardType> cardTypes;

    // 保留原有的内部类、枚举、自定义方法(比如getCardConfiguration())不变
    @Getter @Setter @Builder @AllArgsConstructor
    public static class CardType {
        public CardType() { }
        private ProcessingAccountDto.TypeOfCard type;
        private ApmAgreement revenueAgreement;
    }

    // 原有的枚举类(BatchSecurityOptions、ProcessingAccountType等)全部保留
}

3. 调整ProcessingAccountResource类

替换@Getter @Setter @Builder为@Getter @Setter @SuperBuilder,补充@NoArgsConstructor和@AllArgsConstructor:

@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class ProcessingAccountResource extends ProcessingAccountDto {
    private String id;
    private ProcessingAccountDto cardConfiguration;

    // 原来的显式无参构造可以删掉,@NoArgsConstructor会自动生成
}

二、修正CardConfiguration的字段类型(解决@SuperBuilder后的类型不匹配问题)

你原来的CardConfiguration类中,cardTypes字段被错误声明为List<ProcessingAccountDto.CardType>,但Controller.java里的代码期望它返回List<CardType>(对应com.dto.CardType),这就是改用@SuperBuilder后出现类型错误的根源。

只需要把CardConfiguration的cardTypes字段类型修正为List<CardType>,这样Controller里的cardTypes变量类型和CardConfiguration的字段类型就完全匹配了,类型不兼容的错误会直接消失。


为什么这样调整能解决问题?

  1. @SuperBuilder解决继承场景的Builder生成问题:@SuperBuilder会为每个继承类生成支持父类字段的Builder,同时自动生成静态的builder()方法,彻底解决找不到builder()的编译错误。
  2. 字段类型修正解决类型不匹配:调整CardConfiguration的cardTypes字段类型后,Controller里的代码不需要任何改动,就能完美适配字段类型,不会再出现类型转换错误。
  3. 完全符合你的要求:所有调整都只修改实体类,没有碰过Controller.java的一行代码。

现在你再编译运行代码,之前的两个核心错误都会消失啦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 08:43:07