list、list<object>、list<?> 的三者的区别以及 <? extends t>与<? super t> 的区别
list、list<object>、list<?>
list :完全没有类型限制和赋值限定。
list<object> :看似用法与list一样,但是在接受其他泛型赋值时会出现编译错误。
list<?>:是一个泛型,在没有赋值前,表示可以接受任何类型的集合赋值,但赋值之后不能往里面随便添加元素,但可以remove和clear,并非immutable(不可变)集合。list<?>一般作为参数来接收外部集合,或者返回一个具体元素类型的集合,也称为通配符集合。
<? extends t>与<? super t>
list 最大的问题是只能放置一种类型,如果随意转变类型的话,就是破窗理论,泛型就失去了意义。
为了放置多种受泛型约束的类型,出现了 <? extends t>与<? super t> 两种语法。
<? extends t>:上界通配符(upper bounds wildcards)
<? super t>:下界通配符(lower bounds wildcards)
举例:继承关系:f->e->d->c->b
赋值
<? extends t>只能赋值t或t的子类集合;<? super t>只能赋值t或t的父类集合
add(),get()