Ошибка при использовании конструктора (lombok) в аннотации конструктора - PullRequest
1 голос
/ 11 февраля 2020
@Data
@Builder
public static class Common {
    private String common1;
    private String common2;
}

@Getter
public static class Special extends Common {
    private String special1;

    @Builder
    public Special(String common1, String common2, String special1) {
        super(common1, common2);
        this.special1 = special1;
    }
}

Происходит следующая ошибка:

Error:(149, 9) java: builder() in com.example.home.ExampleDTO.Special cannot override builder() in com.example.home.ExampleDTO.Common   
return type com.example.home.ExampleDTO.Special.SpecialBuilder is not compatible with com.example.home.ExampleDTO.Common.CommonBuilder

И когда я помещаю (builderMethodName = "b") этот параметр в @Builder(Special constructor), то работает нормально.

@Builder(builderMethodName = "b")
public Special(String common1, String common2, String special1) {

Понятия не имею, почему первый код выдает ошибку. Пожалуйста, помогите мне. Спасибо

1 Ответ

3 голосов
/ 11 февраля 2020

@Builder создает метод stati c builder() в обоих классах; он возвращает экземпляр соответствующего компоновщика. Но возвращаемые типы методов несовместимы, потому что SpecialBuilder и CommonBuilder - это разные и не связанные классы: @Builder не рассматривает (и не может технически) учитывать отношение наследования между классами. Таким образом, компилятор жалуется на два метода с одинаковым именем, без аргументов, но с разными типами возвращаемых данных. Это невозможно в Java.

. Чтобы решить эту проблему, у вас есть два варианта:

  1. Используйте @SuperBuilder в обоих классах. @SuperBuilder предназначен для работы с наследованием.

  2. Как вы уже узнали, вы можете переименовать метод в одном из классов.

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