繁体   English   中英

在抽象 class 上使用带有 toBuilder 的 Lombok @SuperBuilder 注释?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM