如何为抽象类实现Lombok @Builder

时间:2018-07-06 10:55:44

标签: java design-patterns builder lombok

我有一些类扩展了一个抽象类,并且我不想将@Builder放在所有子类的顶部。

是否可以为抽象类实现Lombok @Builder

2 个答案:

答案 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文档中的示例代码。您很快就会发现,将它适配成实例化未知子类是不可能的。