如何确保 child class 将在 lombok 中调用正确的超级构造函数?

How to ensure that child class will call the correct super constructor in lombok?

说我有以下classes

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

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

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

我如何(或者甚至有办法)保证在我调用超级构造函数时子构造函数会调用 "correct" 构造函数?更具体地说,我想 100% 确保我传入的三个字符串值确实设置为父项中的正确字段,而不是将 item1 in 设置为 item2.

我知道我可以,例如:

但我很好奇 Lombok 是否足够聪明,以某种方式将子 class 中的字段设置为父 class 中的正确字段?

编辑:

我知道字段的顺序决定了构造函数字段的顺序,但对我来说这不够安全,因为如果有人插入一个新字段,比如说在中间,那么它会抛出一切关闭。

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

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

但是,如果您稍后修改 A 中字段的顺序(或重命名它们),您将得到错误的赋值(或错误的构建器中的参数名称),但不会出现编译器错误。

但有一个简单的解决方法:使用 @SuperBuilder,然后删除 @Data。 (请注意,您的层次结构中的所有 类 都需要 @SuperBuilder。)您不会得到 @AllArgsConstructor,对字段顺序的更改无关紧要,并且名称更改会立即反映在建造者 类.

如果那不可能,您唯一的选择是在 A 中添加一个大的警告注释,建议后来的编码人员不要弄乱名称和顺序。