Lombok @Builder наследование для 3 классов - PullRequest
0 голосов
/ 07 мая 2020

Это, вероятно, вопрос для новичков, но я запутался.

У меня 3 класса, как показано ниже. Как в этом случае использовать аннотацию @Builder от lombok.

Я получаю сообщение об ошибке в классе C при попытке выполнить приведенный ниже код.

Будет ли класс C работать, если родительский класс класса B также имеет аннотацию @Builder?

Я получаю сообщение об ошибке: - Ошибка: java: builder () в классе C не может скрыть builder () в возвращаемом типе ClassB ClassCBuilder несовместим с ClassBBuilder

Class C:

import lombok.Builder;
public class C extends B {
    private String fieldC;

    @Builder
    public C(String fieldC, String fieldB, String fieldA) {
        super(fieldB, String fieldA);
        this.fieldC = fieldC;
    }
}

Класс B:

import lombok.Builder;
public class B extends A {
    private String fieldB;

    @Builder
    public B(String fieldB, String fieldA) {
        super(fieldA);
        this.fieldB = fieldB;
    }
}

Класс A:

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
public abstract class A {
    private String fieldA;
}

1 Ответ

1 голос
/ 07 мая 2020

@Builder следует добавить к class, а не к конструктору, например:

import lombok.Builder;
@Builder
public class C extends B {
    private String fieldC;

    public C(String fieldC, String fieldB, String fieldA) {
        super(fieldB, String fieldA);
        this.fieldC = fieldC;
    }
}

Аннотация @Builder заставляет ломбок генерировать внутренний класс Builder. Добавление таких вещей, как @Builder.Default в поля или методы, просто изменит методы построителя. См. Следующий пример со страницы описания @Builder lombok:

import lombok.Builder;
import lombok.Singular;
import java.util.Set;

@Builder
public class BuilderExample {
    @Builder.Default private long created = System.currentTimeMillis();
    private String name;
    private int age;
    @Singular private Set<String> occupations;
}

Класс, помеченный @Builder, автоматически будет иметь внутренний класс с именем, аналогичным внешнему классу, но с постфиксом 'Builder '. Затем вы можете создать экземпляр такого построителя, позвонив:

MyClass myObject = MyClass.builder().withSomething("abc").build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...