【问题标题】:constructor parent in parent class cannot be applied to given types error父类中的构造函数父级不能应用于给定类型错误
【发布时间】:2019-10-10 03:26:00
【问题描述】:

我想扩展一个父类说:

@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: 父类不应该被修改。

【问题讨论】:

    标签: java inheritance builder lombok


    【解决方案1】:

    @Builder 不适用于继承。它使用生成的构造函数,该构造函数总是调用超类的默认构造函数。在你的情况下不存在。

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

    或者,您可以编写一个手动构造函数,将所有字段作为参数(也包括来自超类的参数)并将@Builder 放在上面。 (注意:在这种情况下避免使用@Builder.Default,因为它会删除字段初始值设定项。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2019-10-05
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多