Я хочу реализовать шаблон Builder для Generi c Базовый класс и подкласс застрял при определении типа Generi c в Base Builder. Вот классы.
Подкласс:
public class Sub extends Base<T> {
private final String key;
private Sub(Builder builder) {
super(builder);
this.key = builder.key;
}
public static SubBuilder extends Base.BaseBuilder<SubBuilder> {
String key;
public SubBuilder key(String key) {
this.key = key;
return this;
}
@Override
public Sub build() {
return new Sub(this);
}
}
}
Базовый класс:
public class Base<T> {
private final T type;
protected Base(BaseBuilder<?> build) {
this.type = build.type;
}
//Base Builder
public static class BaseBuilder<B extends BaseBuilder<B>> {
T type; //This is obviously not right because T is not static reference
public B type(T type) {
this.type = type;
return (B)this;
}
public Base build() {
return new Base(this);
}
}
}
Как уже упоминалось, не может ссылаться на тип T в BaseBuilder. Как установить T с помощью компоновщика здесь. Также нельзя удалить stati c из BaseBuilder. Подходит ли шаблон строителя для такого рода проблем?