Java泛型在JDK1.5以後正式登場,主要解決了Java中強制類型轉換帶來的類型安全問題。簡單的說泛型解決的是關於Java中數據類型的問題。設計模式
以往要實現參數的任意化都是經過對類型Object(全部Java類的最高父類)的引用來實現,而這一操做就要求開發者對實際參數類型預知才能進行顯示轉換。不然在程序運行時將會出現各類類型上的錯誤。安全
引入泛型以後,Java在編譯的時候檢查類型安全,且全部的強制轉換都是自動和隱式的,提升代碼的重用率。學習
本質上來講Java的泛型就是一個用類型做爲參數的類,格式class G<A,B>{ }spa
其中A和B都是類型參數,一個泛型類中能夠包含一個或多個類型參數聲明,多個類型參數聲明之間用逗號隔開。注意這裏的類型參數必須是引用類型,而不能是基本數據類型。設計
如今來看一看泛型的實現機制,這裏要介紹一個概念叫「類型擦除」,Java泛型基本上都是在編譯器這個層次來實現的,即在字節碼中是不包含泛型中類型信息的。使用泛型的時候加上的類型參數,在編譯器編譯時會被去掉,這就叫類型擦除。所以在使用泛型的時候要注意定義List<Object>和List<String>等類型編譯後都會變成List。同時也不能用泛型類型參數建立實例對象,如 E object=new E();當類型擦出以後泛型E是不可用的。對象
使用泛型時能夠制定一個具體的類型,也能夠用通配符?來表示未知類型,通配符表明的實際上是一組類型,但具體類型未知。通配符的使用形式有三種——?、?、extends T或者? super T,其中T爲任意(引用)類型。接口
在具體使用泛型是要注意:開發
在static方法中不可使用泛型,泛型變量也不可使用static關鍵字來修飾。編譯器
不要在泛型類中定義equals(T x)這類方法,因類型擦出後會與Object類中的equals方法衝突。編譯
根據同一個泛型類衍生出來的多個類之間沒有任何關係不能夠相互賦值。
筆者通過一段時間的學習以後感受仍是有不少的細節比沒有注意到,好比說泛型的協變性、泛型接口、泛型方法等等更深刻的應用乃至用泛型實現設計模式等等更爲有趣的內容還有待深刻地學習與實踐的體會總結。