北京北大青鳥學(xué)校講解Java泛型之:什么是泛型(一)

北京北大青鳥學(xué)校學(xué)術(shù)部老師講解:在之后的幾篇文章中,我們將陸續(xù)為大家講解一些關(guān)于Java泛型的內(nèi)容。今天,北京北大青鳥學(xué)校丁老師先給大家講解一下泛型的基礎(chǔ)知識:什么是泛型?
 
北京北大青鳥學(xué)校丁老師:泛型(Generic type 或者 generics)是對 Java 語言的類型系統(tǒng)的一種擴(kuò)展,以支持創(chuàng)建可以按類型進(jìn)行參數(shù)化的類?梢园杨愋蛥(shù)看作是使用參數(shù)化類型時指定的類型的一個占位符,就像方法的形式參數(shù)是運(yùn)行時傳遞的值的占位符一樣。

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

因?yàn)?Map.get() 被定義為返回 Object,所以一般必須將 Map.get() 的結(jié)果強(qiáng)制類型轉(zhuǎn)換為期望的類型,如下面的代碼所示:
Map m = new HashMap();
m.put("key", "blarg");
String s = (String) m.get("key");

北京北大青鳥學(xué)校提示:要讓程序通過編譯,必須將 get() 的結(jié)果強(qiáng)制類型轉(zhuǎn)換為 String,并且希望結(jié)果真的是一個 String。但是有可能某人已經(jīng)在該映射中保存了不是 String 的東西,這樣的話,上面的代碼將會拋出 ClassCastException。

理想情況下,您可能會得出這樣一個觀點(diǎn),即 m 是一個 Map,它將 String 鍵映射到 String 值。這可以讓您消除代碼中的強(qiáng)制類型轉(zhuǎn)換,同時獲得一個附加的類型檢查層,該檢查層可以防止有人將錯誤類型的鍵或值保存在集合中。這就是泛型所做的工作。
北京北大青鳥學(xué)校提供,未完待續(xù))

 

北大青鳥網(wǎng)上報名
北大青鳥招生簡章