的區別


?是通配符(占位符),可以表示任意一個,T只是一種替代,只能表示其中一個

假設有A,B,C三個類

<?>可以是A,B,C任意一個,每一個<?>之間沒有關聯

<T>如果確定了是A那之后的都是A,每一個<T>代表的是相同的

它們都是在類型不確定的時候或者為了支持多種類型的一種替代寫法


####對\ 的一些思考: ####看到很多類定義時都帶了\ 泛型,開始思考為什么要用到這個泛型, ####不是在對象內部直接用Object對象也可以達到同樣的效果,剛開始覺 ####得好像有點多余,后來發現如果直接用Object的話內部要經常用到類 ####型的強制轉換,而\ 在建立時就傳入了特定的的類型。

無法創建泛型數組,編譯不通過

如果允許創建泛型數組,在編譯期間,由於泛型擦除,

泛型數組中的對象將是Object,即泛型數組將是Object[ ],

那樣可以在數組中放入多種對象類型,

假如你把一個原本是A類型的Object類型強轉型成B類型

同時調用了不屬於它的方法就會報java.lang.ClassCastException異常,

這就違反了泛型引入的原則

(如果一段代碼在編譯時沒有提出“未經檢查的轉換”警告,

則程序在運行時不會引發ClasscastException異常)

。所以,Java不允許創建泛型數組。


####泛型擦除的主要過程如下: ####1).將所有的泛型參數用其最左邊界(最頂級的父類型)類型替換。 ####2).移除所有的類型參數。
#### 上界通配符 #### 表示一個生產者,只能獲取,讀取出來的東西只能存放在T或它的基類里,不能存
#### 下界通配符 ####表示一個消費者,一般用於存,獲取只能放在Object對象里
####PECS原則(producer-entends,consumer-super) ####頻繁往外讀取內容的,適合用上界Extends。 ####經常往里插入的,適合用下界Super。


免責聲明!

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



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