龙目岛建设者的继承
Inheritance for builders in lombok
我试图在我的项目中使用 lombok。
我有一个class答:
@Data
@Builder
public class A {
Integer a1;
}
和一个class乙:
@Data
public class B extends A {
Integer b1;
@Builder
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
}
我收到一条错误消息,指出 B 中的 builder() 无法覆盖 A 中的 builder(),因为 BBuilder 中的 return 类型与 ABuilder 中的 return 类型不兼容。
有没有什么方法可以使用 lombok 来做到这一点?
我不想为 B 编写完整的构建器,除非我没有任何其他选择。
PS:由于 Issue,我已经为 class B 提供了显式构造函数。
我尝试搜索,但找不到相同的好的解决方案。
这里只需要调用builder的super就可以了
@Data
public class B extends A {
Integer b1;
@Builder
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
public static class BBuilder extends ABuilder{
BBuilder() {
super();
}
}
}
Lombok 在版本 1.18.2 中引入了实验性功能,用于解决 Builder 注解面临的继承问题,可以通过 @SuperBuilder 注解解决
请使用lombok版本:1.18.2,@SuperBuilder注解在child/parent class
如果您将 Lombok 1.18.4 与 IntelliJ 一起使用,则以下代码适用于您:
@Data
@Builder
class A {
Integer a1;
}
@Data
class B extends A {
Integer b1;
@Builder (builderMethodName = "BBuilder")
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
}
public class Main {
public static void main(String[] args){
System.out.println(B.BBuilder().a1(1).b1(1).build());
}
}
附带说明,@SuperBuilder 注释在编写此答案时在 IntelliJ 中不起作用。如果您有多级继承,请避免使用 Lombok,否则会使您的 Java 模型变得混乱。
child和parent都应该用@SuperBuilder
标记。
将 parent 和 child 都设置为 @Builder
是行不通的。
Parent class答:
@Data
@SuperBuilder
public class A {
Integer a1;
}
Child class B:
@Data
@SuperBuilder
public class B extends A {
Integer b1;
}
我试图在我的项目中使用 lombok。
我有一个class答:
@Data
@Builder
public class A {
Integer a1;
}
和一个class乙:
@Data
public class B extends A {
Integer b1;
@Builder
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
}
我收到一条错误消息,指出 B 中的 builder() 无法覆盖 A 中的 builder(),因为 BBuilder 中的 return 类型与 ABuilder 中的 return 类型不兼容。
有没有什么方法可以使用 lombok 来做到这一点? 我不想为 B 编写完整的构建器,除非我没有任何其他选择。
PS:由于 Issue,我已经为 class B 提供了显式构造函数。 我尝试搜索,但找不到相同的好的解决方案。
这里只需要调用builder的super就可以了
@Data
public class B extends A {
Integer b1;
@Builder
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
public static class BBuilder extends ABuilder{
BBuilder() {
super();
}
}
}
Lombok 在版本 1.18.2 中引入了实验性功能,用于解决 Builder 注解面临的继承问题,可以通过 @SuperBuilder 注解解决
请使用lombok版本:1.18.2,@SuperBuilder注解在child/parent class
如果您将 Lombok 1.18.4 与 IntelliJ 一起使用,则以下代码适用于您:
@Data
@Builder
class A {
Integer a1;
}
@Data
class B extends A {
Integer b1;
@Builder (builderMethodName = "BBuilder")
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
}
public class Main {
public static void main(String[] args){
System.out.println(B.BBuilder().a1(1).b1(1).build());
}
}
附带说明,@SuperBuilder 注释在编写此答案时在 IntelliJ 中不起作用。如果您有多级继承,请避免使用 Lombok,否则会使您的 Java 模型变得混乱。
child和parent都应该用@SuperBuilder
标记。
将 parent 和 child 都设置为 @Builder
是行不通的。
Parent class答:
@Data
@SuperBuilder
public class A {
Integer a1;
}
Child class B:
@Data
@SuperBuilder
public class B extends A {
Integer b1;
}