![](/img/trans.png)
[英]Using Lombok @SuperBuilder annotation with toBuilder on an abstract class?
[英]How to use Lombok's toBuilder on @SuperBuilder
目前我有这三个类:
@Value
@NonFinal
@SuperBuilder
public class Parent {
// Some fields
}
@Value
@EqualsAndHashCode(callSuper = true)
@SuperBuilder(toBuilder = true)
public class ChildA extends Parent {
// Some fields
}
@Value
@EqualsAndHashCode(callSuper = true)
@SuperBuilder(toBuilder = true)
public class ChildB extends Parent {
// Some fields
}
我想在mapper中使用它,如下所示,以避免重复任何代码:
private ChildA buildChildA(Entity entity) {
Parent parent = ((ChildB) buildParent(entity, ChildA.builder().build()))
.toBuilder()
// Populate Child A fields from entity
.build();
}
private ChildB buildChildB(Entity entity) {
Parent parent = ((ChildA) buildParent(entity, ChildA.builder().build()))
.toBuilder()
// Populate Child B fields from entity
.build();
}
private Parent buildParent(Partner entity, Parent parent) {
return parent.toBuilder()
// Populate Parent fields here
.build();
}
但是,当我尝试编译时,我得到:
ChildA.java:13: error: method does not override or implement a method from a supertype
@SuperBuilder(toBuilder = true)
^
ChildB.java:13: error: method does not override or implement a method from a supertype
@SuperBuilder(toBuilder = true)
^
2 errors
你如何使用@SuperBuilder的toBuilder? 我正在使用lombok v1.18.4。
如果要将@SuperBuilder
与toBuilder
一起使用,则层次结构中的所有类必须具有toBuilder=true
。 原因是toBuilder()
方法只复制其各自类的字段值,但是将字段值的复制委托从超类型复制到超类型的toBuilder()
方法。
所以只需将toBuilder=true
添加到您的Parent
类中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.