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

问题描述 投票:0回答:1

我有一个超级班和子班:

@Data
@AllArgsConstructor
public class Parent {

    private String name;

}
@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;
    }

}

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

提前致谢:)

java constructor javabeans lombok pojo
1个回答
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;
}

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

然后您可以将其用作

Child child = Child.builder().age(1).name("Mike").build()

如文档中所写

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

官方文档

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

          public Child(String name, int age) {
            super(name);
            this.age = age;
        }

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

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

© www.soinside.com 2019 - 2024. All rights reserved.