天天看點

java泛型好處及案例

       泛型(Generic type 或者 generics)是對 Java 語言的類型系統的一種擴充,以支援建立可以按類型進行參數化的類。可以把類型參數看作是使用參數化類型時指定的類型的一個占位符,就像方法的形式參數是運作時傳遞的值的占位符一樣。

        可以在集合架構(Collection framework)中看到泛型的動機。例如,Map 類允許您向一個 Map 添加任意類的對象,即使最常見的情況是在給定映射(map)中儲存某個特定類型(比如 String)的對象。

因為 Map.get() 被定義為傳回 Object,是以一般必須将 Map.get() 的結果強制類型轉換為期望的類型,如下面的代碼所示:

Map m = new HashMap();

m.put("key", "blarg");

String s = (String) m.get("key");

要讓程式通過編譯,必須将 get() 的結果強制類型轉換為 String,并且希望結果真的是一個 String。但是有可能某人已經在該映射中儲存了不是 String 的東西,這樣的話,上面的代碼将會抛出 ClassCastException。

理想情況下,您可能會得出這樣一個觀點,即 m 是一個 Map,它将 String 鍵映射到 String 值。這可以讓您消除代碼中的強制類型轉換,同時獲得一個附加的類型檢查層,該檢查層可以防止有人将錯誤類型的鍵或值儲存在集合中。這就是泛型所做的工作。

泛型的好處

Java 語言中引入泛型是一個較大的功能增強。不僅語言、類型系統和編譯器有了較大的變化,以支援泛型,而且類庫也進行了大翻修,是以許多重要的類,比如集合架構,都已經成為泛型化的了。

這帶來了很多好處:

1、類型安全。 泛型的主要目标是提高 Java 程式的類型安全。通過知道使用泛型定義的變量的類型限制,編譯器可以在一個高得多的程度上驗證類型假設。沒有泛型,這些假設就隻存在于程式員的頭腦中(或者如果幸運的話,還存在于代碼注釋中)。

2、消除強制類型轉換。 泛型的一個附帶好處是,消除源代碼中的許多強制類型轉換。這使得代碼更加可讀,并且減少了出錯機會。

3、潛在的性能收益。 泛型為較大的優化帶來可能。在泛型的初始實作中,編譯器将強制類型轉換(沒有泛型的話,程式員會指定這些強制類型轉換)插入生成的位元組碼中。但是更多類型資訊可用于編譯器這一事實,為未來版本的 JVM 的優化帶來可能。由于泛型的實作方式,支援泛型(幾乎)不需要 JVM 或類檔案更改。所有工作都在編譯器中完成,編譯器生成類似于沒有泛型(和強制類型轉換)時所寫的代碼,隻是更能確定類型安全而已。

 Java語言引入泛型的好處是安全簡單。泛型的好處是在編譯的時候檢查類型安全,并且所有的強制轉換都是自動和隐式的,提高代碼的重用率。

    泛型在使用中還有一些規則和限制:

    1、泛型的類型參數隻能是類類型(包括自定義類),不能是簡單類型。

    2、同一種泛型可以對應多個版本(因為參數類型是不确定的),不同版本的泛型類執行個體是不相容的。

    3、泛型的類型參數可以有多個。

    4、泛型的參數類型可以使用extends語句,例如<T extends superclass>。習慣上成為“有界類型”。

    5、泛型的參數類型還可以是通配符類型。例如Class<?> classType = Class.forName(Java.lang.String);

    泛 型還有接口、方法等等,内容很多,需要花費一番功夫才能了解掌握并熟練應用。在此給出我曾經了解泛型時候寫出的兩個例子(根據看的印象寫的),實作同樣的 功能,一個使用了泛型,一個沒有使用,通過對比,可以很快學會泛型的應用,學會這個基本上學會了泛型70%的内容。

本文轉自 沉澱人生 51CTO部落格,原文連結:http://blog.51cto.com/825272560/1876470