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()