Как реализовать Lombok @Builder для класса Abstract - PullRequest
0 голосов
/ 06 июля 2018

У меня есть классы, расширяющие абстрактный класс, и я не хочу ставить @Builder поверх всех дочерних классов.

Есть ли способ реализовать Lombok @Builder для абстрактного класса

Ответы [ 2 ]

0 голосов
/ 09 июля 2018

Это возможно с использованием 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();
0 голосов
/ 06 июля 2018

Не возможно вообще.Конструктор генерируется в суперклассе во время компиляции, и он не может знать о возможных подклассах, которые в конечном итоге его реализуют.

Например, подкласс может иметь конструкторы, которые должны использоваться дляэкземпляр имеет действительное состояние, и Lombok не может знать об этом при создании компоновщика.

Взгляните на пример кода в документации @Builder.Вы быстро увидите, что просто невозможно адаптировать его к созданию неизвестного подкласса.

...