泛型

2018-05-03 13:57 更新

筆者能力有限,總結(jié)有誤的地方,請(qǐng)讀者協(xié)作更正。

1.Java中的泛型是什么?使用泛型的好處?

在集合中存儲(chǔ)對(duì)象,并在使用前進(jìn)行類(lèi)型轉(zhuǎn)換很不方便;java1.5開(kāi)始提供了泛型。 作用:在編譯期進(jìn)行類(lèi)型轉(zhuǎn)換,把正確的類(lèi)型對(duì)象放在入集合中,避免出現(xiàn)類(lèi)型轉(zhuǎn)換異常。

2.泛型是如何工作的?什么是類(lèi)型擦除?

泛型是通過(guò)類(lèi)型擦除來(lái)實(shí)現(xiàn)的,編譯器在編譯的時(shí)候會(huì)擦除所有類(lèi)型的相關(guān)信息,所有在運(yùn)行的時(shí)候不存在任何類(lèi)型轉(zhuǎn)換。例如:定義兩個(gè)數(shù)組,Arraylist<String>,ArrayList<Integer>,我們用getClass()獲取類(lèi)的信息,返回結(jié)果都為true,說(shuō)明類(lèi)型在編譯的時(shí)候被擦除。

為什么泛型用類(lèi)型擦除來(lái)實(shí)現(xiàn)? 因?yàn)榉盒湍鼙WC,我們只需要定義一次類(lèi),就可以被任何數(shù)據(jù)類(lèi)型使用,而不是一種數(shù)據(jù)類(lèi)型定義一個(gè)類(lèi); 泛型只能保存我們使用的數(shù)據(jù)類(lèi)型,而不是一堆的Object;

3.什么是泛型中的限定通配符?和非限定通配符?

限定通配符對(duì)類(lèi)進(jìn)行限制:

4.如何編寫(xiě)一個(gè)泛型方法,讓它能接受泛型參數(shù)并返回泛型類(lèi)型?

使用T, E or K,V等被廣泛認(rèn)可的類(lèi)型占位符;最簡(jiǎn)單的情況下,一個(gè)泛型方法可能會(huì)像這樣:

5.你可以把List<String>傳遞給一個(gè)接受List<Object>參數(shù)的方法嗎?

String是一種Object,看起來(lái)可以傳遞,實(shí)際不可以;因?yàn)長(zhǎng)ist<String>是自定義泛型的,只能用來(lái)存儲(chǔ)String; List<Object>可以用來(lái)存儲(chǔ)所有數(shù)據(jù)類(lèi)型。

6.Array可以用泛型么?

Array事實(shí)上并不支持泛型; Java一書(shū)中建議使用List來(lái)代替Array,因?yàn)長(zhǎng)ist可以提供編譯期的類(lèi)型安全保證,而Array卻不能。

7.如何阻止java中的“類(lèi)型檢查”錯(cuò)誤?

原因:把泛型和原始數(shù)據(jù)類(lèi)型混合使用,編譯時(shí)會(huì)出現(xiàn)該錯(cuò)誤。例如: List<String> rawList = new ArrayList()

8.是否可以使用Object代替通配符“?”使用?

List<?>?是一個(gè)未知類(lèi)型的List,而List<Object> 其實(shí)是任意類(lèi)型的List。 可以把List<String>, List<Integer>賦值給List<?>, 卻不能把List<String>賦值給 List<Object>。? ? ?

9.Java中List<Object>和原始類(lèi)型的List的區(qū)別?

在編譯時(shí)編譯器不會(huì)對(duì)原始類(lèi)型進(jìn)行類(lèi)型安全檢查,卻會(huì)對(duì)帶參數(shù)的類(lèi)型進(jìn)行檢查,通過(guò)使用Object作為類(lèi)型,可以告知編譯器該方法可以接受任何類(lèi)型的對(duì)象,比如String或Integer。

原始類(lèi)型List可以存任何數(shù)據(jù)類(lèi)型,但卻不能把List<String>傳遞給接受 List<Object>的方法,即指定泛型的List不能傳給Object; 因?yàn)闀?huì)產(chǎn)生編譯錯(cuò)誤。

10.List<String>和原始類(lèi)型List之間的區(qū)別?

帶參數(shù)類(lèi)型是類(lèi)型安全的,由編譯器保證的,但原始類(lèi)型List卻不是類(lèi)型安全 的。 原始類(lèi)型List可以存任何數(shù)據(jù)類(lèi)型,List<String>只能存String類(lèi)型

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)