Ломбокская проблема строителя - PullRequest
0 голосов
/ 01 ноября 2019

Я добавил JAR-файл Lombok в STS (затмение). Я использую Lombok для создания объекта, используя builder(). Но я столкнулся с проблемой наследования. Если я использую шаблон Lombok для создания объектов, он работает в рабочей области и в исполняемом файле JAR. Но, если я использую шаблон построителя Lombok для создания объектов, которые наследуют другого объекта, то это не работает.

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class BaseEmp {
    private int a;
    private int b;
}


@Data
@NoArgsConstructor
@Builder
class Emp extends BaseEmp implements Serializable {

    private static final long serialVersionUID = 1L;

    @Builder
    public Emp(int a, int b) {
        super(a, b);
    }

}

Emp emp = Emp.builder.a(ipA).b(ipB).build();

В этом, когда я печатаю объект, значения a и bnull в JAR и работают в STS.

Но, когда я преобразовал в создание обычного объекта в рабочей области и JAR, в обоих местах это работает.

Значит, после компиляции, Lombokпроцессор как-то пропускает поле класса наследования.

1 Ответ

2 голосов
/ 01 ноября 2019

Если вы расширяете другой класс, вам стоит подумать об использовании @SuperBuilder. Хотя он все еще является экспериментальным, сопровождающие Lombok ясно дали понять, что это главным образом потому, что это очень молодая, чрезвычайно сложная функция, которая не будет получать поддержку / исправления так же быстро, как основные функции. Маловероятно, что @SuperBuilder будет изменен или отброшен в будущем.

Однако, если вы хотите придерживаться @Builder, у вас не должно быть @Builder аннотаций как для класса, так и для конструктора. Просто поместите его в конструктор, и он должен работать.

Кроме того, ваш суперкласс также не должен иметь @Builder, в противном случае вы получите конфликт имен при методе builder(). (Вы можете обойти это, переименовав его с помощью параметра builderMethodName.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...