我有一个构建器类,它在大多数方法中返回自身,以便进行链式调用。为了使其与子类一起使用,我希望父类方法返回子类的实例,以便可以链接到子类的方法。
public class BaseBuilder<T extends BaseBuilder<T>> {
public T buildSomething() {
doSomeWork();
/* OPTION #1: */ return this; // "Type mismatch: cannot convert from BaseBuilder<T> to T"
/* OPTION #2: */ return T.this; // "Type mismatch: cannot convert from BaseBuilder<T> to T"
/* OPTION #3: */ return (T) this; // "Type safety: Unchecked cast from SqlBuilder<T> to T"
}
}
public class ChildBuilder extends BaseBuilder<ChildBuilder> {}
选项 #1 和 #2 会导致编译错误,选项 #3 会有一个警告(但可以通过 @SuppressWarnings("unchecked")
来抑制)。这里是否有更好的方法?如何安全地将 Basebuilder 向下转换为 Childbuilder?
BaseBuilder<String>
是没有意义的。 - J.Steve