#java
#java
Вопрос:
у меня проблема с правильным использованием этого шаблона в Java generics, или, возможно, он вообще не будет работать. Я хотел бы иметь 2 абстрактных класса и обычный. Каждый дочерний класс привносит в классы свои собственные параметры. С моей точки зрения, похоже, что я напортачил с дженериками, но я понятия не имею, где.
public abstract class First {
private final long id;
First(Builder<?> builder) {
this.id = builder.getId();
}
public static abstract class Builder<T extends Builder<T>> {
@Getter long id;
public abstract First build();
public T setID(long id) {
this.id = id;
return (T)self();
}
protected abstract T self();
}
второй:
public abstract class Second extends First {
Second(Builder<?> builder) {
super(builder);
}
public static abstract class Builder<T extends Builder<T>> extends First.Builder {
public T print() {
System.out.println("hi");
return (T) self();
}
}
}
и в-третьих:
public class Third extends Second {
private Third(Builder builder) {
super(builder);
}
public static class Builder<T extends Builder<T>> extends Second.Builder {
public Third build() {
return new Third(this);
}
@Override
protected Builder self() {
return this;
}
}
}
моя проблема в том, что я могу вызвать:
new Third.Builder()
.print()
.setID(1)
.build();
но не:
new Third.Builder()
.setID(1)
.print()
.build();
java дает мне:
Error:(13, 17) java: cannot find symbol
symbol: method print()
location: class blub.First.Builder
Комментарии:
1. Используйте Lombok
@SuperBuilder
и избавьте себя от лишних хлопот2. я проверю это