如何使用Lombok创建一个调用超类AllArgsConstructor的构造函数?

Xi *_*hui 9 java constructor pojo javabeans lombok

我有一个超级类和子类:

@Data
@AllArgsConstructor
public class Parent {

    private String name;

}
Run Code Online (Sandbox Code Playgroud)
@Data
public class Child extends Parent {

    private int age;

    // I want Lombok to create an equivalent constructor.
    public Child(String name, int age) {
        super(name);
        this.age = age;
    }

}
Run Code Online (Sandbox Code Playgroud)

如何使用 Lombok 注释来帮助我创建子类构造函数?

提前致谢 :)

Pan*_*kos 4

从 lombok 版本开始,1.18.2您可以使用注释@SuperBuilder

@Data
@AllArgsConstructor
@SuperBuilder
public class Parent {

    private String name;

}
@Data
@SuperBuilder
public class Child extends Parent {

    private int age;
}
Run Code Online (Sandbox Code Playgroud)

请记住,注释需要同时位于父类和子类中。

然后你可以用它作为Child child = Child.builder().age(1).name("Mike").build()

正如文档中所写

@SuperBuilder 在类上生成一个受保护的构造函数,该构造函数将构建器实例作为参数。此构造函数将新实例的字段设置为构建器中的值。

官方文档

正如文档中所解释的,这并不能完全生成问题所要求的内容,

          public Child(String name, int age) {
            super(name);
            this.age = age;
        }
Run Code Online (Sandbox Code Playgroud)

但它创建了一个构造函数,该构造函数将构建器作为参数,并从该构建器及其包含的参数继续实例化父类和子类中的两个字段。但这是 lombok 唯一可能的解决方案,即使用子类中的构造函数来实例化父类和子类中的字段。

请记住,这是 4 年前作为实验性功能添加的,它仍然是 lombok 的一部分。