你們好,我是Java最全面試題庫
的提褲姐
,今天這篇是面試系列的第六篇,主要總結了JavaSE中泛型相關面試題,在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更
,但願你也能夠跟着百日百刷
,一百天養成一個好習慣。java
Java泛型( generics)是JDK 5中引⼊的⼀個新特性, 容許在定義類和接口的時候使⽤類型參數( type parameter) 。
聲明的類型參數在使⽤時⽤具體的類型來替換。泛型最主要的應⽤是在JDK 5中的新集合類框架中。面試
泛型最⼤的好處是能夠提⾼代碼的復⽤性。以List接口爲例,咱們能夠將String、 Integer等類型放⼊List中, 如不⽤泛型, 存放String類型要寫⼀個List接口, 存放Integer要寫另外⼀個List接口, 泛型能夠很好的解決這個問題。框架
過類型參數合併,將泛型類型實例關聯到同一份字節碼上。
編譯器只爲泛型類型生成一份字節碼,並將其實例關聯到這份字節碼上。
泛型是經過類型擦除來實現的,編譯器在編譯時擦除了全部類型相關的信息,因此在運行時不存在任何類型相關的信息。例如 List在運行時僅用一個List來表示。這樣作的目的,是確保能和Java 5以前的版本開發二進制類庫進行兼容。你沒法在運行時訪問到類型參數,由於編譯器已經把泛型類型轉換成了原始類型。code
類型擦除的主要過程以下:
1.將全部的泛型參數用其最左邊界(最頂級的父類型)類型替換。
2.移除全部的類型參數。對象
List 是一個未知類型的List,而List 實際上是任意類型的List。
能夠把List, List賦值給List,卻不能把List賦值給 List。接口
限定通配符
:
對類型進行了限制。有兩種限定通配符:開發
泛型類型必須用限定內的類型來進行初始化,不然會致使編譯錯誤。
非限定通配符
:
表示了非限定通配符,由於能夠用任意類型來替代。編譯器
E - Element (在集合中使用,由於集合中存放的是元素)
T - Type(Java 類)
K - Key(鍵)
V - Value(值)
N - Number(數值類型)
?- 表示不肯定的java類型(無限制通配符類型)
Object - 是全部類的根類,任何類的對象均可以設置給該Object引用變量,使用的時候可能須要類型強制轉換,可是用使用了泛型T、E等這些標識符後,在實際用以前類型就已經肯定了,不須要再進行類型強制轉換。編譯
public V put(K key, V value) { return cache.put(key, value); }