如何为抽象实现 Lombok @Builder class

How to implements Lombok @Builder for Abstract class

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

有没有什么方法可以为抽象 class 实现 Lombok @Builder

根本不可能。生成器在编译期间生成到超级 class 中,它无法知道最终将实现它的可能子 classes。

例如,子 class 可能具有构造函数,实例必须使用这些构造函数才能具有有效状态,而 Lombok 在生成构建器时不知道它。

查看@Builder 文档中的示例代码。您很快就会发现,将其改编为实例化未知的子 class.

是不可能的

这在 lombok 1.18.2(及更高版本)中使用新的(实验性)注释 @SuperBuilder 是可能的。唯一的限制是层次结构中的每个 class 都必须具有 @SuperBuilder 注释。没有办法将 @SuperBuilder 放在所有 subclasses 上,因为 Lombok 在编译时无法知道所有 subclasses。 有关详细信息,请参阅 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();