自限定类型强制泛型当做其自己的边界参数来使用。
package a;
/**
* Created by msc on 2017/1/15.
*/
class SelfBounded<T extends SelfBounded<T>>{
T element;
SelfBounded<T> set(T arg){
element=arg;
return this;
}
T get(){return element;}
}
class A extends SelfBounded<A>{}
class B extends SelfBounded<A>{}
class C extends SelfBounded<C>{
C setAndGet(C arg){
set(arg);
return get();
}
}
class D{}
//因为类D没有继承SelfBounded,所以该类编译失败。
//class E extends SelfBounded<D>{}
class SelfBounding {
public static void main(String[] args) {
A a=new A();
a.set(new A());
a=a.set(new A()).get();
a=a.get();
C c=new C();
c=c.setAndGet(new C());
}
}
自限定所做的就是要求在继承关系中,强制要求将正在定义的类当做参数传递给基类。
自限定参数据有何意义呢?它可以保证类型参数必须与正在被定义的类相同,还可以使用另一个继承了SelfBounded的子类作为参数。但是让参数与正在被定义的类相同是主要用法。