泛型中? super T和? extends T的区别

经常发现有List<? super T>、Set<? extends T>的声明,是什么意思呢?<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。

extends

通配符 与 T 的区别

T:作用于模板上,用于将数据类型进行参数化,不能用于实例化对象。 
?:在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义。

< T > 等同于 < T extends Object>
< ? > 等同于 < ? extends Object>
<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”

<? super T>:是指 “下界通配符(Lower Bounds Wildcards)”

? extends T>限定参数类型的上界:参数类型必须是T或T的子类型

<? super T> 限定参数类型的下界:参数类型必须是T或T的超类型

 

posted @ 2018-01-09 16:57  javaobject  阅读(1254)  评论(0编辑  收藏  举报