我有一些类扩展了一个抽象类,并且我不想将@Builder
放在所有子类的顶部。
是否可以为抽象类实现Lombok @Builder
?
答案 0 :(得分:7)
在lombok 1.18.2(及更高版本)中,可以使用新的(实验性)注释@SuperBuilder
来实现。唯一的限制是层次结构中的每个类都必须具有@SuperBuilder
批注。无法将@SuperBuilder
放在所有子类上,因为Lombok在编译时无法知道所有子类。
有关详细信息,请参见lombok documentation。
示例:
@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();
答案 1 :(得分:3)
完全不可能。生成器在编译期间生成到超类中,并且它对最终实现它的可能子类不了解。
例如,子类可能具有必须用于实例的构造函数才能具有有效状态,而Lombok在生成构建器时对此一无所知。
看看@Builder文档中的示例代码。您很快就会发现,将它适配成实例化未知子类是不可能的。