Java泛型-通配符的上限和下限問題


Java的泛型中,通配符可以設置上限和下限。

上限:<? extends T> ?是T和T的子類

下限:<? super T> ?是T和T的父類

怎么看待這個上限和下限呢 首先應該想 其實對於Java來說 <? extends T> <? super T> 是兩個確定的類型,因為它不可能由你的賦值完了再確定吧。所以,對於<? extends T> 來說,集合里的元素應該是什么類型呢?應該是T類型,因為你添加的是T或者T的子類,設置為T就可以激發多態了。是了,所以你也只能從這個集合中取出T類型,因為它里面的元素本來設置的就是T類型,你賦值進去只不過是將T的子類賦值給了T,多態。但是呢,你就不能給這個集合里添加元素了,因為這個集合里元素的類型是T,假如可以添加元素,你初始化的時候初始化成T的一個子類,然后添加值的時候,卻添加的另一個子類,事實上是可以添加的,因為集合元素類型是T,但里面就有了多種T的子類,好了,你初始化的時候是這個子類,你取出元素的時候肯定也想着取出的是可以給這個子類賦值的類型,但很有可能取出來的是T的另一個子類,你沒法賦值,因為你允許添加另一個子類。所以一開始就禁止添加元素是對的。

<? super T>里面的元素,應該設置為什么呢?顯然應該是object,因為系統不知道你會把?當成什么,所以只能設置成object,所以你取出元素的時候,取出的是object類。可不可以添加元素呢?可以,因為下限有保證,所以可以添加T和T的子類。你初始化的時候,初始化的是T的某個父類,好了,你現在取元素,你希望取出的是你初始化的那個父類,因為你只能添加T和T的子類,所以你取出的元素,肯定可以賦值給那個父類。

綜上,<? extends T> 不可以添加元素,但可以取出類型為T的元素。 <? super T> 可以添加T或者T的子類,取出的一定是object類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM