java的一個(gè)設(shè)計(jì)理念是 ,與泛型相關(guān)的異常最好是在編譯期間就被發(fā)現(xiàn) , 因此設(shè) 計(jì)了extends與super這兩種方式 。具體來(lái)說(shuō) ,List<? extends T>表示該集合中存在的都是類(lèi)型T的子類(lèi) ,包括T自 己 。
而List<? super T>表示該集合中存的都是類(lèi)型T的父類(lèi) ,包括T自己 。
List<? extends T>如果去添加元素的時(shí)候 , 因?yàn)閘ist中存放的其實(shí)是T的一種子 類(lèi) ,如果我們?nèi)ヌ砑釉?,其實(shí)不知道到底應(yīng)該添加T的哪個(gè)子類(lèi) ,這個(gè)時(shí)候橋 接方法在進(jìn)行強(qiáng)轉(zhuǎn)的時(shí)候會(huì)出錯(cuò) 。但是如果是從集合中將元素取出來(lái) ,我們可以 知道取出來(lái)的元素肯定是T類(lèi)型 。所以? extends T這種方式可以取元素而不能添 加 ,這個(gè)叫g(shù)et原則 。List<? super T>因?yàn)榇娴亩际穷?lèi)型T的父類(lèi) ,所以如果去添加T類(lèi)或者T類(lèi)子類(lèi)的 元素 ,肯定是可以的 。但是如果將元素取出來(lái) ,則不知道到底是什么類(lèi)型 ,所 以? super T可以添加元素但是沒(méi)法取出來(lái) ,這個(gè)叫put原則 。常見(jiàn)的一些泛型標(biāo)識(shí)就是T(類(lèi)型)、E(元素)、K(key)、V(value)、? (通配符 ,不確定的)這幾個(gè) ,其實(shí)填任何字母都行 。
更多內(nèi)容 公眾號(hào):天堂比不過(guò)家鄉(xiāng)
,別忘了 贊助關(guān)注哦!