Java 如何确保子类在lombok中调用正确的超级构造函数?

Java 如何确保子类在lombok中调用正确的超级构造函数?,java,lombok,Java,Lombok,假设我有以下课程 @AllArgsConstructor @NoArgsConstructor @Data @Builder public class A { private String item1; private String item2; private String item3; } 及 当我调用超级构造函数时,如何保证子构造函数调用“正确”的构造函数?更具体地说,我希望100%确保我传入的三个字符串值确实设置为父级中的正确字段,而不是设置为item1 in

假设我有以下课程

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class A {

    private String item1;
    private String item2;
    private String item3;
}

当我调用超级构造函数时,如何保证子构造函数调用“正确”的构造函数?更具体地说,我希望100%确保我传入的三个字符串值确实设置为父级中的正确字段,而不是设置为item1 in的字段

例如,我知道我可以:

  • 显式创建我自己的所有参数构造函数
  • 在子构造函数中,调用父构造函数的所有setter
但我只是好奇Lombok是否足够聪明,能够将子类中的字段设置为父类中的正确字段

编辑

我知道字段的顺序决定了构造函数字段的顺序,但是对我来说不够安全,因为如果有人插入了一个新字段,比如说中间,那么它就会把所有的东西都扔掉。


然而,@SuperBuilder可能是我可以使用的东西,正如一些人所建议的,如果不是,那么我将直接创建自己的构造函数来保证字段的顺序

AllArgsConstructor的参数顺序与源代码中字段的顺序匹配。所以现在你是安全的

但是,如果以后修改
A
中字段的顺序(或重命名它们),则会得到错误的赋值(或生成器中的参数名错误),但不会出现编译器错误

但有一个简单的解决方法:使用
@SuperBuilder
,然后删除
@数据。(请注意,在层次结构中的所有类上都需要
@SuperBuilder
)。您不会得到
@allargsconstuctor
s,对字段顺序的更改是无关的,并且名称更改会立即反映在生成器类中


如果这是不可能的,你唯一的选择就是在
a
中添加一条大大的警告性评论,建议以后的编码人员不要乱动名字和顺序。

不要使用龙目山。我不明白你的问题。您正在显式调用超级构造函数。Lombok没有生成它。另外,不知道为什么不使用SuperBuilder@英国人这里没有JPA。2) 这主张在整个库中避免1个特定注释,但不主张避免整个库3)我应该知道/关心随机Twitter配置文件属于谁吗?在你的类
B
中,你调用构造函数
super(item1,item2,item3)。这就是AllArgsConstructor。因为它将所有3个字段都作为参数。更多内容:当然,但我不会对可变类使用生成器,因为您只会得到流畅的链式设置器<代码>++
大肥肉警告可以伴随一个简单的单元测试。
@Data
public class B extends A {

    private String item4;

    @Builder(builderMethodName = "bBuilder")
    public B(String item1, String item2, String item3, String item4) {
        super(item1, item2, item3);
        this.item4 = item4;
    }
}