?是通配符(占位符),可以表示任意一個,T只是一種替代,只能表示其中一個
假設有A,B,C三個類
<?>可以是A,B,C任意一個,每一個<?>之間沒有關聯
<T>如果確定了是A那之后的都是A,每一個<T>代表的是相同的
它們都是在類型不確定的時候或者為了支持多種類型的一種替代寫法
####對\
無法創建泛型數組,編譯不通過
如果允許創建泛型數組,在編譯期間,由於泛型擦除,
泛型數組中的對象將是Object,即泛型數組將是Object[ ],
那樣可以在數組中放入多種對象類型,
假如你把一個原本是A類型的Object類型強轉型成B類型
同時調用了不屬於它的方法就會報java.lang.ClassCastException異常,
這就違反了泛型引入的原則
(如果一段代碼在編譯時沒有提出“未經檢查的轉換”警告,
則程序在運行時不會引發ClasscastException異常)
。所以,Java不允許創建泛型數組。
####泛型擦除的主要過程如下: ####1).將所有的泛型參數用其最左邊界(最頂級的父類型)類型替換。 ####2).移除所有的類型參數。
#### 上界通配符 #### 表示一個生產者,只能獲取,讀取出來的東西只能存放在T或它的基類里,不能存
#### 下界通配符 ####表示一個消費者,一般用於存,獲取只能放在Object對象里
####PECS原則(producer-entends,consumer-super) ####頻繁往外讀取內容的,適合用上界Extends。 ####經常往里插入的,適合用下界Super。
