北京北大青鳥學(xué)校學(xué)術(shù)部老師講解:在之后的幾篇文章中,我們將陸續(xù)為大家講解一些關(guān)于Java泛型的內(nèi)容。今天,北京北大青鳥學(xué)校丁老師先給大家講解一下泛型的基礎(chǔ)知識(shí):什么是泛型?
北京北大青鳥學(xué)校丁老師:泛型(Generic type 或者 generics)是對(duì) Java 語(yǔ)言的類型系統(tǒng)的一種擴(kuò)展,以支持創(chuàng)建可以按類型進(jìn)行參數(shù)化的類。可以把類型參數(shù)看作是使用參數(shù)化類型時(shí)指定的類型的一個(gè)占位符,就像方法的形式參數(shù)是運(yùn)行時(shí)傳遞的值的占位符一樣。
可以在集合框架(Collection framework)中看到泛型的動(dòng)機(jī)。例如,Map 類允許您向一個(gè) Map 添加任意類的對(duì)象,即使最常見的情況是在給定映射(map)中保存某個(gè)特定類型(比如 String)的對(duì)象。
因?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é)校提示:要讓程序通過(guò)編譯,必須將 get() 的結(jié)果強(qiáng)制類型轉(zhuǎn)換為 String,并且希望結(jié)果真的是一個(gè) String。但是有可能某人已經(jīng)在該映射中保存了不是 String 的東西,這樣的話,上面的代碼將會(huì)拋出 ClassCastException。
理想情況下,您可能會(huì)得出這樣一個(gè)觀點(diǎn),即 m 是一個(gè) Map,它將 String 鍵映射到 String 值。這可以讓您消除代碼中的強(qiáng)制類型轉(zhuǎn)換,同時(shí)獲得一個(gè)附加的類型檢查層,該檢查層可以防止有人將錯(cuò)誤類型的鍵或值保存在集合中。這就是泛型所做的工作。
(北京北大青鳥學(xué)校提供,未完待續(xù))