public class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel>
子类型B是父类型AbstractBootstrap 的一个类型参数,因此可以法返回到运行时实例的引用以支持方法的链式调用;
(1)自限定类型
class BasicHolder<T> {
private T element;
public T get(){ return element; }
public void set(T t) { element = t; };
}
// 导出Subtype继承了BasicHolder,限定基类的参数为导出类
class Subtype extends BasicHolder<Subtype> { }
CRG本质:基类用导出类替换器参数,这意味着泛型基类变成了其所有导出类的所有公共功能的模板,但是这些功能的对于其所有参数和返回值,将使用导出类型。
自限定强制泛型当作其自己的边界参数来使用。确保类型参数必须与正在被定义的类相同。
class SelfBound<T extends SelfBound<T>> {
T element;
SelfBound<T> set(T arg) {
element = arg;
return this;
}