java中泛型是什么
泛型的概念
所謂泛型,就是允許在定義類、接口時通過一個標識表示類中某個屬性的類型或者是某個方法的返回值及參數類型。這個類型參數將在使用時(例如,繼承或實現這個接口,用這個類型聲明變量、創建對象時)確定(即傳入實際的類型參數,也稱為類型實參)。
從JDK1.5以后,Java引入了“參數化類型(Parameterized type)”的概念,允許我們在創建集合時再指定集合元素的類型,正如:List,這表明該List只能保存字符串類型的對象。
JDK1.5改寫了集合框架中的全部接口和類,為這些接口、類增加了泛型支持,從而可以在聲明集合變量、創建集合對象時傳入類型實參。泛型的本質是參數化類型,即所操作的數據類型被指定為一個參數。這種類型參數可以用在類、接口和方法的創建中,分別稱為泛型類、泛型接口、泛型方法。
在沒有泛型的情況下,通過對類型Object的引用來實現參數的轉換,這種轉換是需要顯式地強制類型轉換,對于強制類型轉換錯誤的情況,編譯器可能不提示錯誤,而在運行時候卻又通不過,這是一個安全隱患??赡芙o我們的開發帶來了麻煩,難以找到運行時錯誤,增加不必要的精力開支,所以一般提倡使用泛型來實現參數化類型。
使用泛型的好處
1.類型安全。泛型的主要目的就是提高Java程序的類型安全。通過知道使用泛型定義的變量的類型限制,編譯器可以在一個高得多的程度上驗證類型假設。沒有泛型,這些假設只能我們自己記或者代碼注釋;
2.消除強制類型轉換。泛型一個附帶好處是,消除代碼中許多強制類型的轉換。減少代碼出錯率,更好閱讀;
3.潛在的性能收益??梢詭砀玫膬灮赡?。在泛型的初始實現中,編譯器強制類型轉換(沒有泛型的話,程序員會指定這些強制類型轉換,)插入生成的字節碼中。但是更多類型信息可用于編譯器這一事實,為以后的JVM可以帶來更好的優化。由于泛型的實現方式,支持泛型幾乎不需要JVM或類文件更改,所有工作都在編譯器中完成,編譯器生成的類沒有泛型(和強制類型轉換),只是來確保數據類型安全;
Java泛型可以保證如果程序在編譯時沒有發出警告,運行時就不會產生ClassCastException異常。同時,代碼更加簡潔、健壯。