【问题标题】:NoArgsConstructor and AllArgsConstructor annotation on Child class for parent constructors父构造函数的子类上的 NoArgsConstructor 和 AllArgsConstructor 注释
【发布时间】:2022-02-04 18:12:23
【问题描述】:

对于溢出社区,您好,我正在努力解决 Lombok 的继承问题。我正在尝试在子类上添加注释 @AllArgsConstructor@NoArgsConstructor 以使用父 lombok 构造函数,但得到错误 “重复方法 Child()”

父类:

@ToString
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public class Parent {
    private String propertyA;
    private String propertyB;
}

儿童班:

@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class Child extends Parent {
    @Override
    public void setPropertyA(String propertyA) {
        this.propertyA(StringUtils.upperCase(propertyA));
    }
}

错误信息:

Child Java(67109219) 类型中的重复方法 Child()

感谢@rentox98 的回复,我了解到我的子类上的 ArgsConstructor 将始终为空,从而导致两个相同的构造函数。

是否有 Lombok 方法可以根据父 lombok ArgsConstructors 在我的子类上生成 ArgsConstructors ?

【问题讨论】:

  • 顺便说一句,使用@Data 和使用所有@Getter@Setter@ToString 之间的唯一区别是前者也能得到你@EqualsAndHashCode 所以除非有一些你想避免让 Lombok 在Parent 上生成equalshashCode 方法的原因,只使用@Data 更简洁。
  • 嘿,你现在可以接受@rentox98 的回答吗?然后我会删除我的。谢谢。

标签: java inheritance lombok


【解决方案1】:

在您的 Child 类中,您没有任何属性,因此 @NoArgsConstructor@AllArgsConstructor 相同并发生错误。


如果你想要一个将属性传递给父类的全参数构造函数的全参数构造函数,你必须自己编写它; Lombok 不会生成它。

@SuperBuilder
@NoArgsConstructor
public class Child extends Parent {
    public Child(String propertyA, String propertyB) {
        super(StringUtils.upperCase(propertyA), propertyB);
    }
    
    @Override
    public void setPropertyA(String propertyA) {
        this.propertyA(StringUtils.upperCase(propertyA));
    }
}

【讨论】:

  • 不用道歉,这是一个很好的答案,也是正确的答案。 +1
  • 谢谢,现在我也获得了评论的权限。
  • @DavidConrad : 如果目标是在 Child 类中有一个将属性传递给 Parent 类的构造函数怎么办?
  • @nquincampoix 我认为您必须明确地编写该构造​​函数。 Java 中没有构造函数的继承,我不知道如何让 Lombok 为您生成它。但我认为这是另一个问题。
  • @nquincampoix 我为那个案例添加了一个答案。请注意rentox98:如果您想将其合并到您已有的答案中,请随意,然后我将删除我的答案,我们将有一个涵盖所有基础的答案。
猜你喜欢
  • 2020-10-19
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 2021-07-14
  • 2014-12-16
  • 2021-09-19
相关资源
最近更新 更多