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

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

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

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

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

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

 

北大青鳥(niǎo)網(wǎng)上報(bào)名
北大青鳥(niǎo)招生簡(jiǎn)章