北京北大青鳥學(xué)校學(xué)術(shù)部講解:泛型的好處

北京北大青鳥學(xué)校資深學(xué)術(shù)老師張老師介紹:Java 語(yǔ)言中引入泛型是一個(gè)較大的功能增強(qiáng)。不僅語(yǔ)言、類型系統(tǒng)和編譯器有了較大的變化,以支持泛型,而且類庫(kù)也進(jìn)行了大翻修,所以許多重要的類,比如集合框架,都已經(jīng)成為泛型化的了。這帶來(lái)了很多好處:(北大青鳥課程

類型安全。北京北大青鳥學(xué)校張老師解釋,泛型的主要目標(biāo)是提高 Java 程序的類型安全。通過(guò)知道使用泛型定義的變量的類型限制,編譯器可以在一個(gè)高得多的程度上驗(yàn)證類型假設(shè)。沒(méi)有泛型,這些假設(shè)就只存在于程序員的頭腦中(或者如果幸運(yùn)的話,還存在于代碼注釋中)。

北京北大青鳥學(xué)校:Java 程序中的一種流行技術(shù)是定義這樣的集合,即它的元素或鍵是公共類型的,比如“String 列表”或者“String 到 String 的映射”。通過(guò)在變量聲明中捕獲這一附加的類型信息,泛型允許編譯器實(shí)施這些附加的類型約束。類型錯(cuò)誤現(xiàn)在就可以在編譯時(shí)被捕獲了,而不是在運(yùn)行時(shí)當(dāng)作 ClassCastException 展示出來(lái)。將類型檢查從運(yùn)行時(shí)挪到編譯時(shí)有助于您更容易找到錯(cuò)誤,并可提高程序的可靠性。(北大青鳥課程

消除強(qiáng)制類型轉(zhuǎn)換。 泛型的一個(gè)附帶好處是,消除源代碼中的許多強(qiáng)制類型轉(zhuǎn)換。這使得代碼更加可讀,并且減少了出錯(cuò)機(jī)會(huì)。

盡管減少?gòu)?qiáng)制類型轉(zhuǎn)換可以降低使用泛型類的代碼的羅嗦程度,但是聲明泛型變量會(huì)帶來(lái)相應(yīng)的羅嗦。比較下面兩個(gè)代碼例子。(北大青鳥課程

該代碼不使用泛型:
List li = new ArrayList();
li.put(new Integer(3));
Integer i = (Integer) li.get(0);

該代碼使用泛型:
List<Integer> li = new ArrayList<Integer>();
li.put(new Integer(3));
Integer i = li.get(0);

在簡(jiǎn)單的程序中使用一次泛型變量不會(huì)降低羅嗦程度。但是對(duì)于多次使用泛型變量的大型程序來(lái)說(shuō),則可以累積起來(lái)降低羅嗦程度。(北大青鳥課程

潛在的性能收益。 泛型為較大的優(yōu)化帶來(lái)可能。在泛型的初始實(shí)現(xiàn)中,編譯器將強(qiáng)制類型轉(zhuǎn)換(沒(méi)有泛型的話,程序員會(huì)指定這些強(qiáng)制類型轉(zhuǎn)換)插入生成的字節(jié)碼中。但是更多類型信息可用于編譯器這一事實(shí),為未來(lái)版本的 JVM 的優(yōu)化帶來(lái)可能。(北大青鳥課程)

由于泛型的實(shí)現(xiàn)方式,支持泛型(幾乎)不需要 JVM 或類文件更改。所有工作都在編譯器中完成,編譯器生成類似于沒(méi)有泛型(和強(qiáng)制類型轉(zhuǎn)換)時(shí)所寫的代碼,只是更能確保類型安全而已。(北京北大青鳥學(xué)校提供,未完待續(xù))

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