如何为Abstract类实现Lombok @Builder

sam*_*sam 3 java design-patterns builder lombok

我有扩展抽象类的类,我不想把它@Builder放在所有子类之上.

有没有办法@Builder为抽象类实现Lombok ?

Tor*_*ben 10

根本不可能。构建器在编译期间生成到超类中,它无法了解最终将实现它的可能子类。

例如,子类可能具有必须用于实例才能具有有效状态的构造函数,而 Lombok 在生成构建器时无法了解它。

查看@Builder 文档中的示例代码。您很快就会发现,将它改编为实例化一个未知的子类是不可能的。


Jan*_*eke 8

这可以使用lombok 1.18.2(及更高版本)使用新的(实验性)注释@SuperBuilder.唯一的限制是层次结构中的每个类都必须具有@SuperBuilder注释.没有办法放置@SuperBuilder所有子类,因为Lombok在编译时无法知道所有子类.有关详细信息,请参阅lombok文档.

例:

@SuperBuilder
public abstract class Superclass {
    private int field1;
}

@SuperBuilder
public class Subclass extends Superclass {
    private int field2;
}

Subclass instance = Subclass.builder().field1(1).field2(2).build();
Run Code Online (Sandbox Code Playgroud)