<? extends T>是泛型的上界(含),<? super T>是泛型的下界(含),
而且,对泛型不能只约束下限,如果只对子类做约束,父类可以千奇百怪。
extends后面跟的类型如<任意字符 extends 类/接口>表示泛型的上限,
super表示泛型的下限。
1
2
3
4
5
6
7
8
9
10
|
import
java.util.*;
class
Demo<T
extends
AbstractList>{}
public
class
Test
{
public
static
void
main(String[] args) {
Demo<ArrayList> p =
null
;
// 编译正确
//这里因为ArrayList是AbstractList的子类所以通过
//如果改为Demo<AbstractCollection> p = null;就会报错这样就限制了上限
}
}
|
>>一个示例
编译正确,
1
2
3
4
5
6
|
public
class
TestGeneric <T
extends
Comparable<?
super
T>>
{
public
static
void
main(String[] args) {
TestGeneric<GregorianCalendar> p =
null
;
// 编译正确
}
}
|
<T extends Comparable<? super T>>,T表示任意字符名,extends对泛型上限进行了限制即T必须是Comparable<? super T>的子类,然后<? super T>表示Comparable<>中的类型下限为T。
去掉<? super T>则编译报错,
1
2
3
4
5
6
7
8
9
10
|
public
class
TestGeneric <T
extends
Comparable<T>>
{
/**
* <T extends Comparable<T>>相当于<GregorianCalendar extends Comparable<GregorianCalendar>>
* 但是GregorianCalendar并没有实现Comparable<GregorianCalendar>而是实现的Comparable<Calendar>,这里不在限制范围之内
*/
public
static
void
main(String[] args) {
TestGeneric<GregorianCalendar> p =
null
;
// 编译错误
}
}
|