[英]Using Lombok @SuperBuilder annotation with toBuilder on an abstract class?
我有以下课程:
@SuperBuilder(toBuilder = true)
public abstract class Parent {
//...
}
@SuperBuilder(toBuilder = true)
public class Child extends Parent {
//...
}
@SuperBuilder(toBuilder = true)
public class Child2 extends Parent {
//...
}
为什么我无法在抽象 class ( Parent
) 的实例上调用toBuilder()
,如以下代码所示?
public copy(Parent parent) {
parent.toBuilder().build();
}
事实上,正如Hossein Nasr 已经解释的那样,Lombok 无法知道是否存在不需要toBuilder=true
的子类。
Lombok 可以通过在抽象 class 上添加abstract toBuilder()
方法来要求抽象 class 的所有直接子类也使用toBuilder
。 但是,可能存在子类不应该有toBuilder
的用例(尽管我还没有看到任何好的例子)。 此外,间接子类可能仍然缺少toBuilder
功能。 因此, toBuilder
抽象类的子类强制执行 toBuilder。
好消息是,您可以通过手动添加abstract toBuilder()
方法轻松解决它(仅直接子类):
@SuperBuilder(toBuilder = true)
public abstract class Parent {
public abstract ParentBuilder<?, ?> toBuilder();
}
通过此更改,您的copy
方法将按预期编译和工作。
免责声明:我实现了@SuperBuilder
功能。
这可能是因为Lombok不能保证Parent
的每个子class也被标记为@SuperBuilder(toBuilder=true)
,如果是,Lombok不能调用该实例的toBuilder
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.