当前位置: 首页 > 知识库问答 >
问题:

如何在Lombok中调用超级构造函数

郑正阳
2023-03-14

我有课

@Value
@NonFinal
public class A {
    int x;
    int y;
}

我还有一个B级

@Value
public class B extends A {
    int z;
}

lombok抛出错误,说它找不到()构造函数,显式调用它。我想让lombok做的是给类b提供注释,这样它就生成了以下代码:

public class B extends A {
    int z;
    public B( int x, int y, int z) {
        super( x , y );
        this.z = z;
    }
}

我们在龙目岛有注释吗?

共有2个答案

司寇阳曦
2023-03-14

Lombok第78期引用了本页https://www.donneo.de/2015/09/16/Lomboks-builder-annotation-and-inherity/并用以下可爱的解释:

@AllArgsConstructor 
public class Parent {   
     private String a; 
}

public class Child extends Parent {
  private String b;

  @Builder
  public Child(String a, String b){
    super(a);
    this.b = b;   
  } 
} 

因此,您可以使用生成的构建器,如下所示:

Child.builder().a("testA").b("testB").build(); 

官方文档对此进行了解释,但没有明确指出您可以通过这种方式进行便利化。

我还发现这对Spring Data JPA很管用。

壤驷棋
2023-03-14

这在龙目岛是不可能的。虽然这将是一个非常好的特性,但它需要分辨率来找到超级类的构造函数。只有在调用Lombok时才知道超级类的名称。使用import语句和类路径查找实际的类并不简单。在编译过程中,您不能仅仅使用反射来获取构造函数列表。

这并不是完全不可能的,但是在val@extensionmethod中使用解析的结果告诉我们,它很难并且容易出错。

揭秘:我是龙目岛开发者。

 类似资料:
  • 问题内容: 在所有其他与super构造函数一起使用的语言中,都是隐式调用的。如何在Python中调用它?我希望这是行不通的。 问题答案: super()在新样式类中返回类似父对象的对象:

  • 说我有以下课程 和 当我调用超级构造函数时,如何保证子构造函数调用“正确”的构造函数?更具体地说,我希望100%确保我传入的三个字符串值确实设置为父级中的正确字段,而不是设置为item1 in的字段。 我知道我可以,例如: 显式创建我自己的所有参数构造函数 在子构造函数中,调用父构造函数的所有setter 但是我只是好奇Lombok是否足够聪明,以某种方式,将子类中的字段设置为父类中正确的字段?

  • 问题内容: 我有一个类A,并写了一个子类B。A只有一个参数化的构造函数。B必须调用A的这个超级构造函数。现在,我想使用一个Object作为参数。该对象应调用B的方法。因此,参数对象必须持有B的引用,或者必须是内部类。 现在,当我想调用构造函数时,……Eclipse说: 在显式调用构造函数时无法引用“ this”或“ super” 我唯一想解决的是设置方法,将“ this”实例注入到参数对象中。我不

  • 自从spring宣布不推荐使用字段注入后,我开始在我的项目中使用构造函数注入。实际上,代码感觉更漂亮,更严格,我可以接受。但我遇到了一个模式,对我来说有点...怪异和冗长: 我有一个抽象的服务bean类(带有注释),它有2个依赖项,直接注入到构造函数中: 然后,我有多个服务bean类(仍然使用注释)扩展抽象服务。我不知道是否还有其他方法,但我发现在每个子类构造函数中注入父级的依赖关系有点冗长和重复

  • 问题内容: 如何使用call_user_func_array调用类的构造函数 这是不可能的: 因为如果构造函数具有参数,则 新的 将失败。 约束:我不控制必须实例化的类,也不能修改它们。 不要问我为什么要做这个疯狂的事情,这是一个疯狂的考验。 问题答案: 您可以像这样使用反射: 从PHP 5.6.0起,也可以将运算符用于此目的。

  • 所以我在学习java继承,我遇到了一个我不知道如何解决的问题。 我要做的是从超类中调用一个子类构造函数。我不知道这是否有任何意义,但我会尝试用一个例子来解释我自己。 我为什么要这么做? 我希望能够主要不必处理智能手机。 我希望能够做到: