我有以下类(class):
@SuperBuilder(toBuilder = true)
public abstract class Parent {
//...
}
@SuperBuilder(toBuilder = true)
public class Child extends Parent {
//...
}
@SuperBuilder(toBuilder = true)
public class Child2 extends Parent {
//...
}
为什么我无法在抽象类 (
toBuilder()
) 的实例上调用 Parent
,如下面的代码所示?public copy(Parent parent) {
parent.toBuilder().build();
}
最佳答案
实际上,作为 Hossein Nasr already explained ,Lombok 无法知道是否存在没有 toBuilder=true
的子类。
通过在抽象类上添加 toBuilder
方法,Lombok 可以要求抽象类的所有直接子类也使用 abstract toBuilder()
。但是,可能存在子类不应具有 toBuilder
的用例(尽管我还没有看到任何好的例子)。此外,间接子类可能仍然缺少 toBuilder
功能。因此,lombok 不会对抽象类的子类强制执行 toBuilder
。
好消息是,您可以通过手动添加 abstract toBuilder()
方法轻松解决您的情况(仅限直接子类):
@SuperBuilder(toBuilder = true)
public abstract class Parent {
public abstract ParentBuilder<?, ?> toBuilder();
}
通过此更改,您的
copy
方法将按预期编译和工作。免责声明:我实现了
@SuperBuilder
功能。关于java - 在抽象类上使用带有 toBuilder 的 Lombok @SuperBuilder 注释?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61633821/