Я пытаюсь создать несколько классов с некоторой иерархией наследования. Для создания экземпляров этих классов я хочу использовать построители, но я также хочу переопределить некоторые методы в этих построителях. Поскольку наследование есть, я реализовал его с помощью @SuperBuilder. Но добавление дженериков все немного испортило, и я не знаю, как это правильно исправить.
У меня есть базовый класс, определенный как:
Код: Выделить всё
@SuperBuilder
public class Base {
protected T payload;
protected String name;
protected String attribute;
}
теперь я хотел создать новый класс, который расширяет этот класс, но будет ограничивать тип атрибута полезной нагрузки, а также устанавливать некоторые значения по умолчанию, поэтому я определил его как:
Код: Выделить всё
@SuperBuilder
public class ChildA extends Base {
public abstract static class ChildABuilder
extends Base.BaseBuilder {
NotifiedEventBuilder() {
super.name("CHILD A");
}
@Override
public B payload(T payload) {
return super.payload(payload).attribute(payload.attribute());
}
}
}
но это приведет к ошибке: «оба метода имеют одинаковое стирание, но ни один из них не скрывает другой». Поэтому я изменил родительский @SuperBuilder на @SuperBuilder(builderMethodName = "baseBuilder"), что решило проблему. (Давайте предположим, что у Payload также есть атрибут «attribute», просто для иллюстрации моей проблемы).
Однако я не могу создать такой экземпляр. Пытаюсь сделать следующее:
Код: Выделить всё
ChildA
childA = ChildA.builder()
.payload(new PayloadChild())
.build();
приводит к ошибке в .payload(new PayloadChild()), в которой говорится, что ожидалось T, но был предоставлен PayloadChild. (Предполагается, что PayloadChild расширяет Payload).
Я попробовал «деломбокинг» кода и создал несколько функциональный класс. Но у меня все еще есть проблемы со сборкой экземпляров базового класса, например, для тестирования, и я не считаю, что деломбокинг должен быть решением.
Что я делаю не так? Какие изменения потребуются, чтобы это заработало?
Подробнее здесь:
https://stackoverflow.com/questions/781 ... capture-of