我想扩展一个父类说:
@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:不应修改父类。
答案 0 :(得分:1)
@Builder
不能很好地继承。它使用生成的构造函数,该构造函数始终调用超类的默认构造函数。在您的情况下不存在。
如果可以使用实验功能,请尝试@SuperBuilder
。但是,两个类都需要该批注,因此无法避免修改Parent
。此外,IntelliJ尚不支持@SuperBuilder
。
或者,您可以编写一个手动构造函数,将所有字段作为参数(也包括超类中的那些字段)作为参数,然后在其上放@Builder
。 (注意:在这种情况下,请避免使用@Builder.Default
,因为它会删除字段初始化程序。)