Spring Boot抽象类用@Builder报错:无合适Property构造方法
解决Lombok抽象类与子类Builder构造器报错问题
问题根源
你的子类Apartment使用了@Builder注解,但父类Property用的是@SuperBuilder,两者不兼容,导致Lombok无法自动生成正确调用父类构造器的代码,进而引发构造器参数不匹配或无默认构造器的错误。
正确实现代码
抽象父类 Property
import lombok.Getter; import lombok.Setter; import lombok.experimental.SuperBuilder; @SuperBuilder @Getter @Setter public abstract class Property { private Long id; private String address; // 无需手动编写构造器,@SuperBuilder会自动生成子类可调用的构造逻辑 }
子类 Apartment
import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import lombok.experimental.SuperBuilder; @SuperBuilder // 子类必须使用@SuperBuilder而非@Builder,与父类保持一致 @Getter @Setter @EqualsAndHashCode(callSuper = true) public class Apartment extends Property { private String houseId; private Integer floor; }
关键说明
- 当父类使用
@SuperBuilder时,所有子类必须同样使用@SuperBuilder,Lombok才会自动处理父类属性的构造传递,无需手动编写super()调用。 - 若强行在子类使用
@Builder,需手动为父类添加全参构造器,并在子类构造器中显式调用父类全参构造器,但这种方式会丧失Lombok自动生成Builder的便捷性,不建议采用。
内容的提问来源于stack exchange,提问作者Nisi Zenuni
相关产品推荐
相关产品推荐

