父类中的构造函数parent不能应用于给定类型错误

时间:2019-05-23 14:12:11

标签: java inheritance builder lombok

我想扩展一个父类说:

@Getter
@Builder
public class Parent {

@Builder.default
private final int maxCats = 1;

@NonNull
private final String catName;
}

我正在进行以下操作,

@Getter
@ToString
@Builder
public class child extends Parent{

@Builder.default
private final int maxCats = 100;

@NonNull
private final String catName;

@Builder.Default
private final int maxDogs = 500;
}

在构建软件包时,出现以下错误:

error: constructor Parent in class Parent cannot be applied to given types;
[javac] @Builder
[javac] ^
[javac]   required: int,String
[javac]   found: no arguments
[javac]   reason: actual and formal argument lists differ in length

有人可以帮我找出错误原因吗?

P.S:不应修改父类。

1 个答案:

答案 0 :(得分:1)

@Builder不能很好地继承。它使用生成的构造函数,该构造函数始终调用超类的默认构造函数。在您的情况下不存在。

如果可以使用实验功能,请尝试@SuperBuilder。但是,两个类都需要该批注,因此无法避免修改Parent。此外,IntelliJ尚不支持@SuperBuilder

或者,您可以编写一个手动构造函数,将所有字段作为参数(也包括超类中的那些字段)作为参数,然后在其上放@Builder。 (注意:在这种情况下,请避免使用@Builder.Default,因为它会删除字段初始化程序。)