gpt4 book ai didi

java - 如何确保子类将在 lombok 中调用正确的 super 构造函数?

转载 作者:行者123 更新时间:2023-12-04 10:26:52 26 4
gpt4 key购买 nike

说我有以下类(class)

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

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

我知道我可以,例如:
  • 显式创建我自己的所有 args 构造函数
  • 在子构造函数中,调用父级的所有 setter

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

    编辑 :

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

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

    最佳答案

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

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

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

    如果这是不可能的,你唯一的选择就是在 A 中放一个大大的警告评论。建议后来的编码人员不要弄乱名称和顺序。

    关于java - 如何确保子类将在 lombok 中调用正确的 super 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60604327/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com