Наследование с аннотацией lombok получает ошибки - PullRequest
0 голосов
/ 15 сентября 2018

В моем проекте lombok используется для того, чтобы не писать геттеры и сеттеры для класса.У меня есть два класса Child extends Parent:

@Value
@Builder
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Parent {
    @Nonnull
    @JsonProperty("personId")
    private final String personId;

    @JsonProperty("personTag")
    private final String personTag;
    ...
}

и

@Value
@Builder
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Child extends Parent {
    @Nonnull
    @JsonProperty("childId")
    private final String childId;
    ...
}

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

1 Ответ

0 голосов
/ 15 сентября 2018

Иерархии классов + lombok работает не особенно хорошо, в том смысле, что операции lombok, выполняемые с вашим Child классом, ничего не знают о parent.

Тем не менее, ваш конкретный вопрос кажется отвечающим:

Класс Parent имеет конструктор, который принимает все поля, потому что вы попросили lombok создать этот конструктор через @AllArgsConstructor. Следовательно, он не имеет конструктора без аргументов. Если вам нужны оба конструктора (тот, который принимает все поля + второй, который не принимает аргументов, a.k.a. конструктор по умолчанию), также добавьте аннотацию @NoArgsConstructor, чтобы сообщить lombok, что вы этого хотите.

NB: @Builder также не работает с иерархией, но новая новая функция @SuperBuilder работает. Я уверен, что вы хотите заменить @Builder на @SuperBuilder здесь. SuperBuilder требует, чтобы ВСЕ классы в иерархии были помечены @SuperBuilder, а не @Builder.

...