我有以下类(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/

10-10 02:37