extends T>表示类型的上界,也就是说,参数化的类型可能是T或者T的子类型。例如下面的写法都是合法的赋值语句:
~~~ java
List extends Number> list = new ArrayList();
List extends Number> list = new ArrayList();
List extends Number> list = new ArrayList();
~~~
### 读数据分析
1. 不管给list如何赋值,可以保证list里面存放的一定是Number类型或其子类,因此可以从list列表里读取Number类型的值。
2. 不能从list中读取Integer,因为list里面可能存放的是Float值,同理,也不可以从list里面读取Float。
### 写数据分析
1. 不能向list中写Number,因为list中有可能存放的是Float
1. 不能向list中写Integer,因为list中有可能存放的是Float
2. 不能向list中写Float,因为list中有可能存放的是Integer
从上面的分析可以发现,只能从List extends T>读取T,因为无法确认它实际执行列表的类型,从而无法确定列表里面存放的实际的类型,所以无法向列表里面添加元素。
*(个人表示怀疑吧,如果只能读取,那完全不知道这个容器存在的意义)*
## super T>
super T>表示类型下届,也就是说,参数化的类型是此类型的超类型。
~~~ java
List super Float> list = new ArrayList();
List super Float> list = new ArrayList();
List super Float> list = new ArrayList