说我有以下课程
@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;
}
}
当我调用超级构造函数时,如何保证子构造函数调用“正确”的构造函数?更具体地说,我希望100%确保我传入的三个字符串值确实设置为父级中的正确字段,而不是设置为item1 in的字段。
我知道我可以,例如:
但是我只是好奇Lombok是否足够聪明,以某种方式,将子类中的字段设置为父类中正确的字段?
编辑:
我知道字段的顺序决定了构造函数字段的顺序,但对我来说这还不够安全,因为如果有人插入一个新字段,比如在中间,那么它会把所有东西都扔掉。
然而,@SuperBuilder可能是我可以使用的东西,正如一些人所建议的,如果不是,那么我将直接创建自己的构造函数来保证字段的顺序。
@allargsconstuctor
的参数顺序与源代码中字段的顺序匹配。所以现在你是安全的。
但是,如果您稍后修改A
中字段的顺序(或重命名它们),您将得到错误的赋值(或生成器中错误的参数名称),但没有编译器错误。
但有一个简单的解决方法:使用@SuperBuilder
,然后删除@数据。(请注意,层次结构中的所有类都需要
@SuperBuilder
。)您将无法获得@allargsconstuctor
s,对字段顺序的更改是不相关的,并且名称更改会立即反映在生成器类中。
如果这是不可能的,您唯一的选择就是在
a
中添加一条大大的警告注释,建议以后的编码人员不要乱动名称和顺序。
我有课 我还有一个B级 lombok抛出错误,说它找不到()构造函数,显式调用它。我想让lombok做的是给类b提供注释,这样它就生成了以下代码: 我们在龙目岛有注释吗?
问题内容: 在所有其他与super构造函数一起使用的语言中,都是隐式调用的。如何在Python中调用它?我希望这是行不通的。 问题答案: super()在新样式类中返回类似父对象的对象:
您可以看到,我正在将“that”作为参数传递给PrintInfo。如果没有“that”参数,“info”将打印为“undefined”。像下面的例子一样,当从“子类”的对象调用此函数时,“this.info”是未定义的。 如何在javascript中重写和调用超类的方法,使函数能够访问类的实例变量?
我有一个目前看起来像这样的方法: 我的理解是这是错误的。所以现在我正在考虑修复它,它应该是这样的: . doOn成功将返回一个客户响应,我需要在调用Health之前实际检查响应中的内容。构建器::。 如果我调用. fletMap()而不是doOn成功,它会出现错误吗?或者我需要把它放在doOn成功中吗?如果我把它放在doOn成功中,似乎我需要做一个双重doOn成功(这不可能是正确的,是吗?): 此
问题内容: 我正在尝试创建一个将字段作为参数的构造函数,然后将其放入存储在超类中的字段中。这是我正在使用的代码 在超类中,我用 我有一个访问器方法 我收到一个错误“ 味道在超类中具有私有访问权 ”,但是我认为这无关紧要,因为我正在调用将其返回到字段的访问器方法? 问题答案: 您应该做什么: 在您的超类中添加一个构造函数: 在Crisps类中: 注释 对您的问题的一些评论: “在超类中,我已经用”
所以我在学习java继承,我遇到了一个我不知道如何解决的问题。 我要做的是从超类中调用一个子类构造函数。我不知道这是否有任何意义,但我会尝试用一个例子来解释我自己。 我为什么要这么做? 我希望能够主要不必处理智能手机。 我希望能够做到: