Lombok @Builder继承同时为父母和孩子工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lombok @Builder继承同时为父母和孩子工作相关的知识,希望对你有一定的参考价值。
我已经读过这篇关于使用lombok @Bulider
继承https://reinhard.codes/2015/09/16/lomboks-builder-annotation-and-inheritance/的帖子一切都很好。但在我的情况下,我还需要使用Parent class
的构建器,这种解决方法不起作用。
我尝试将@Builder
添加到Parent class
但是编译失败,因为Child class
尝试覆盖来自Parent的builder()
方法。
@AllArgsConstructor
public class Parent {
private final long a;
private final long b;
private final double c;
}
public class Child extends Parent{
private final long aa;
private final long bb;
private final double cc;
@Builder
public Child(long a, long b, long c,
long aa, long bb, long cc)
super(a,b,c);
this.aa = aa;
this.bb = bb;
this.cc =cc;
}
我需要两个案例构建器:
Parent.builder().a(10).b(20).build();
Child.builder().a(10).aa(20).bb(100).build();
lombok可以处理这种情况吗?
答案
Lombok尝试从Child中的Parent类重写builder()
方法。所以我试着将默认名称设置为builder方法。
@Builder(builderMethodName = "parentBuilder")
@AllArgsConstructor
public class Parent {
private final long a;
private final long b;
private final double c;
}
public class Child extends Parent{
private final long aa;
private final long bb;
private final double cc;
@Builder(builderMethodName = "childBuilder")
public Child(long a, long b, long c,
long aa, long bb, long cc)
super(a,b,c);
this.aa = aa;
this.bb = bb;
this.cc =cc;
}
这对我行得通。
另一答案
Lombok针对Builder注释面临的继承问题引入了版本:1.18.2的实验性功能,可以使用@SuperBuilder注释解决如下。
@SuperBuilder
public class ParentClass {
private final String a;
private final String b;
}
@SuperBuilder
public class ChildClass extends ParentClass{
private final String c;
}
现在,可以使用如下的Builder类(使用@Builder注释无法实现)
ChildClass.builder().a("testA").b("testB").c("testC").build();
以上是关于Lombok @Builder继承同时为父母和孩子工作的主要内容,如果未能解决你的问题,请参考以下文章
Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!
Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!