您要声明
T为
extends AbstractBuilder<T>中
AbstractBuilder。
使用
abstract protected方法获取
thistype
T。
abstract class AbstractBuilder<T extends AbstractBuilder<T>> { protected abstract T getThis(); public T foo() { // set some property return getThis(); }}class TheBuilder extends AbstractBuilder<TheBuilder> { @Override protected TheBuilder getThis() { return this; } ...}或者,
TheBuilder如果使实现更加冗长,则删除泛型类型参数,依靠协变量返回类型,并使代码更干净(尽管通常它们将使用客户端,而不是使用基类的大部分实现细节)。



