泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。 Java語言引入泛型的好處是安全簡(jiǎn)單。
在Java SE 1.5之前,沒有泛型的情況的下,通過對(duì)類型Object的引用來實(shí)現(xiàn)參數(shù)的“任意化”,“任意化”帶來的缺點(diǎn)是要做顯式的強(qiáng)制類型轉(zhuǎn)換,而這種轉(zhuǎn)換是要求開發(fā)者對(duì)實(shí)際參數(shù)類型可以預(yù)知的情況下進(jìn)行的。對(duì)于強(qiáng)制類型轉(zhuǎn)換錯(cuò)誤的情況,編譯器可能不提示錯(cuò)誤,在運(yùn)行的時(shí)候才出現(xiàn)異常,這是一個(gè)安全隱患。
泛型的好處是在編譯的時(shí)候檢查類型安全,并且所有的強(qiáng)制轉(zhuǎn)換都是自動(dòng)和隱式的,提高代碼的重用率。
1、泛型的類型參數(shù)只能是類類型(包括自定義類),不能是簡(jiǎn)單類型。
2、同一種泛型可以對(duì)應(yīng)多個(gè)版本(因?yàn)閰?shù)類型是不確定的),不同版本的泛型類實(shí)例是不兼容的。
3、泛型的類型參數(shù)可以有多個(gè)。
4、泛型的參數(shù)類型可以使用extends語句,例如。習(xí)慣上稱為“有界類型”。
5、泛型的參數(shù)類型還可以是通配符類型。例如Class classType = Class.forName("java.lang.String");
泛型擦除以及相關(guān)的概念
Java中的泛型基本上都是在編譯器這個(gè)層次來實(shí)現(xiàn)的。在生成的Java字節(jié)碼中是不包含泛型中的類型信息的。使用泛型的時(shí)候加上的類型參數(shù),會(huì)在編譯器在編譯的時(shí)候去掉。這個(gè)過程就稱為類型擦除。
類型擦除引起的問題及解決方法
1、先檢查,在編譯,以及檢查編譯的對(duì)象和引用傳遞的問題
2、自動(dòng)類型轉(zhuǎn)換
3、類型擦除與多態(tài)的沖突和解決方法
4、泛型類型變量不能是基本數(shù)據(jù)類型
5、運(yùn)行時(shí)類型查詢
6、異常中使用泛型的問題
7、數(shù)組(這個(gè)不屬于類型擦除引起的問題)
9、類型擦除后的沖突
10、泛型在靜態(tài)方法和靜態(tài)類中的問題
鏈接:http://www.itdecent.cn/p/251b1bf72cd8