如何实现龙目岛抽象类@Builder

2022-09-01 18:23:50

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

有没有办法为抽象类实现龙目岛?@Builder


答案 1

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

例:

@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();

答案 2

根本不可能。生成器在编译期间生成到超类中,并且它不能对最终实现它的可能子类有任何了解。

例如,子类可能具有必须用于实例的构造函数才能具有有效状态,并且在生成生成器时,Lombok 不能对此有任何了解。

请查看@Builder文档中的示例代码。您很快就会发现,不可能将其调整为实例化未知的子类。


推荐