如何使用 lombok SuperBuilder 访问 super class 的私有变量
How to access private variable of super class by using lombok SuperBuilder
我有两个 class Parent 和 Child,其中 Parent 和 Child class 有一个同名变量。
-> Parent class
@Getter
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class Parent {
private String parentA;
private String parentB;
private String parentC;
}
-> Child Class
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class Child extends Parent {
private String childA;
private String parentB; //variable name is same as Parent class
private String childC;
}
现在在 Main class 我正在使用构建器制作 Child class object。
public class Main {
public static void main(String Args[]) {
Child child = Child.builder()
.parentA()
.parentB() // Here it is setting Child class variable
.parentC()
.childA()
.childC()
.build();
}
}
现在我想设置 parentB 变量 parent class。有什么方法可以设置吗?
@SuperBuilder
为注释的 class 中定义的每个字段生成一个方法,但不为来自 superclasses 的字段生成一个方法。相反,生成的构建器 class extends
是 superclass 的构建器 class,因此来自 superclasses 的字段的方法是从那些构建器继承的。
如果 Parent
和 Child
中有两个完全相似的字段,ChildBuilder
中的方法只是覆盖 ParentBuilder
中的方法。无法再从 ParentBuilder
调用方法(除了一些丑陋的 MethodHandle
hack,你不应该这样做)。
备注:有两个相同的字段表示它们具有相似的含义。如果是这种情况,请制作一个 protected
并删除另一个。如果它们的含义不同,那么同样命名它们是一个非常糟糕的主意,即使您不使用 @SuperBuilder
.
也几乎肯定会导致错误
我有两个 class Parent 和 Child,其中 Parent 和 Child class 有一个同名变量。
-> Parent class
@Getter
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class Parent {
private String parentA;
private String parentB;
private String parentC;
}
-> Child Class
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class Child extends Parent {
private String childA;
private String parentB; //variable name is same as Parent class
private String childC;
}
现在在 Main class 我正在使用构建器制作 Child class object。
public class Main {
public static void main(String Args[]) {
Child child = Child.builder()
.parentA()
.parentB() // Here it is setting Child class variable
.parentC()
.childA()
.childC()
.build();
}
}
现在我想设置 parentB 变量 parent class。有什么方法可以设置吗?
@SuperBuilder
为注释的 class 中定义的每个字段生成一个方法,但不为来自 superclasses 的字段生成一个方法。相反,生成的构建器 class extends
是 superclass 的构建器 class,因此来自 superclasses 的字段的方法是从那些构建器继承的。
如果 Parent
和 Child
中有两个完全相似的字段,ChildBuilder
中的方法只是覆盖 ParentBuilder
中的方法。无法再从 ParentBuilder
调用方法(除了一些丑陋的 MethodHandle
hack,你不应该这样做)。
备注:有两个相同的字段表示它们具有相似的含义。如果是这种情况,请制作一个 protected
并删除另一个。如果它们的含义不同,那么同样命名它们是一个非常糟糕的主意,即使您不使用 @SuperBuilder
.