Наследование Lombok Builder со сложной структурой классов - PullRequest
0 голосов
/ 29 апреля 2019

Я читал другие вопросы, касающиеся строителя и наследования lombok, но ни одно из решений не сработало. Использование Lombok версии 1.18.4 и Java 11.

Я пытаюсь унаследовать родительский конструктор, а также удовлетворить интерфейс, используя только неизменяемые поля. Это моя классовая структура:

Код

public interface FooInterface {
    String getFoo();
}

Логика getFoo очень распространена во всех реализациях, поэтому я решил создать помощник Abstract, чтобы избежать копирования и вставки одного и того же кода везде.

@Data
@SuperBuilder
public abstract class AbstractFoo implements FooInterface {

    @Builder.Default
    private final String foo = "foo";

}

И фактическая Foo реализация:

@Data
@SuperBuilder
public class FooTest extends AbstractFoo {
    private final String bar;
}

«Условие выигрыша»

Я бы хотел, чтобы Ломбок

  1. Распознавание полей, обязательных для родительского класса.
  2. Включить эти поля в сгенерированные построители дочерних классов.

В коде:

final FooInterface fooTest = FooTest.builder.foo("string").bar("string").build();
assertThat("string").equals(fooTest.getFoo());
assertThat("string").equals(fooTest.getBar());

Попытки решения

Проблема в том, что IntelliJ выделяет аннотацию @Data с этой ошибкой:

Lombok нужен конструктор по умолчанию в базовом классе.

Если я удаляю @Data из FooTest, я получаю эту ошибку:

Нет конструктора по умолчанию, доступного в базовом классе .

Поэтому я удалил @SuperBuilder из AbstractFoo и добавил созданный вручную конструктор со всеми аргументами. Ошибка сохраняется. Я пробовал другие вещи и комбинации аннотаций, но ни одна из них не сработала.

Я также попытался - напрасно - установить для всех полей AbstractFoo значение protected final и объявить реализации Foo final сами, что будет соответствовать моим бизнес-правилам.

1 Ответ

1 голос
/ 03 мая 2019

@SuperBuilder пока не поддерживается текущей версией плагина IntelliJ IDEA.

Есть открытый вопрос о трекере Github проекта - https://github.com/mplushnikov/lombok-intellij-plugin/issues/513

Хотя он рассчитан на выпуск 0.25, который был выпущен всего несколько дней назад - https://github.com/mplushnikov/lombok-intellij-plugin/releases/tag/releasebuild_0.25

Проблема все еще остается открытой и еще не реализована.

Я бы предложил просто попробовать версию 0.25 и дождаться следующего релиза, если он не будет работать.

...