Lombok @Value @Нефинальное наследование

Juan спросил: 28 марта 2018 в 04:47 в: java

Я пытаюсь связать несколько классов @Value @NonFinal без создания каких-либо конструкторов.

Ожидая, что lombok решает сгенерировать конструктор, который вызывает super со всеми аргументами, которые соответствуют.

Есть ли способ достичь этого? Кажется, что он разбивается с ошибкой, которая не имеет смысла, потому что у класса отца есть такой конструктор, заданный аннотацией. Я пробовал это с классами в разных файлах, с тем же поведением.

Пример:

public class TestLombok {@Value
@NonFinal
class A {
    @NonNull Integer a;
}@Value
@NonFinal
class B extends A {
    String b;
}}

Ошибка: (12, 5) java: constructor A в классе TestLombok. A не может применяться к заданным типам: требуется: java.lang.Integerfound: no argumentsreason: фактические и формальные списки аргументов различаются по длине

1 ответ

Есть решение
Roel Spilker ответил: 30 марта 2018 в 07:38

К сожалению, это невозможно.

Чтобы выяснить, какие поля или методы имеют родительский класс, требуется разрешение. В тот момент, когда lombok нужно генерировать методы, разрешение становится невозможным, поскольку это изменит исход доступных полей и методов.

Раскрытие информации: я разработчик lombok.

Juan ответил: 02 апреля 2018 в 04:11
Спасибо, Рол! Можете ли вы сказать, есть ли план поддержать это с помощью дополнительных аннотаций, или я должен просто принять дополнительный шаблон?
Juan ответил: 04 апреля 2018 в 11:16
Я закончил тем, что отказался от наследования классов в пользу интерфейсов, чтобы сделать проект Lombok дружественным для неизменяемых DTO, в моем случае все выглядит чище.