当我们使用泛型时,如果需要用到用于实例化泛型的类型L的特殊方法时,可能需要限定L的类型。
例如,当我们需要在泛型中对L进行比较时,由于我们既不能不能保证L继承Number类,也不能保证L具有比较方法,故下面的方法会失效,换成其他比较方法(如compare或compareTo)也会失效:
public class Exmaple<L> {
private L a ,b;
public void compare(){
if(a>b){
return 1;
}
else{
return -1;
}
}
}
这种情况下,我们需要保证用于实例化的类型是可比较的,比如L若实现了Comparable<L>接口,无论L是什么类型,我们都可以使用该类自带的compareTo方法或重写compareTo进行比较。
这时我们想限制L的类型,只需要在"<L>"添加"extends superclass"对类型进行限制,其中superclass为L继承/实现的的类/接口,并且可以不止一个。
class generic<L extends superclass>(){}
public class Exmaple<L extends Comparable<L>> {
private L a ,b;
public void compare(){
if(a.compareTo(b)>0){
return 1;
}
else{
return -1;
}
}
}
这里extends表述的意思是"限定",而不是"继承",故不可以理解为L继承/实现了多个类/接口,与Java只能单继承相悖,而是L需要有这些类/接口的中定义的特性。