天天看點

Java泛型

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

Java泛型
Java泛型