Java的泛型中,通配符可以设置上限和下限。
上限
上限:<? extends T> ?是T和T的子类
首先要知道<? extends T> <? super T> 是两个确定的类型。
对于<? extends T> 来说,集合里的元素应该应该是T类型,因为你添加的是T或者T的子类,设置为T就可以激发多态了。所以你也只能从这个集合中取出T类型,因为它里面的元素本来设置的就是T类型,你赋值进去只不过是将T的子类赋值给了T。但是呢,你就不能给这个集合里添加元素了,因为这个集合里元素的类型是T,假如可以添加元素,你初始化的时候初始化成T的一个子类,然后添加值的时候,却添加的另一个子类,事实上是可以添加的,因为集合元素类型是T,但里面就有了多种T的子类,好了,你初始化的时候是这个子类,你取出元素的时候肯定也想着取出的是可以给这个子类赋值的类型,但很有可能取出来的是T的另一个子类,你没法赋值,因为你允许添加另一个子类。所以一开始就禁止添加元素是对的。
下限
下限:<? super T> ?是T和T的父类
<? super T>里面的元素应该是object,因为系统不知道你会把?当成什么,所以只能设置成object,所以你取出元素的时候,取出的是object类。
可以添加元素,因为下限有保证,所以可以添加T和T的子类。你初始化的时候,初始化的是T的某个父类,好了,你现在取元素,你希望取出的是你初始化的那个父类,因为你只能添加T和T的子类,所以你取出的元素,肯定可以赋值给那个父类。