W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
筆者能力有限,總結(jié)有誤的地方,請讀者協(xié)作更正。
1.Java中的泛型是什么?使用泛型的好處?
在集合中存儲對象,并在使用前進(jìn)行類型轉(zhuǎn)換很不方便;java1.5開始提供了泛型。 作用:在編譯期進(jìn)行類型轉(zhuǎn)換,把正確的類型對象放在入集合中,避免出現(xiàn)類型轉(zhuǎn)換異常。
2.泛型是如何工作的?什么是類型擦除?
泛型是通過類型擦除來實(shí)現(xiàn)的,編譯器在編譯的時(shí)候會擦除所有類型的相關(guān)信息,所有在運(yùn)行的時(shí)候不存在任何類型轉(zhuǎn)換。例如:定義兩個(gè)數(shù)組,Arraylist<String>,ArrayList<Integer>,我們用getClass()獲取類的信息,返回結(jié)果都為true,說明類型在編譯的時(shí)候被擦除。
為什么泛型用類型擦除來實(shí)現(xiàn)? 因?yàn)榉盒湍鼙WC,我們只需要定義一次類,就可以被任何數(shù)據(jù)類型使用,而不是一種數(shù)據(jù)類型定義一個(gè)類; 泛型只能保存我們使用的數(shù)據(jù)類型,而不是一堆的Object;
3.什么是泛型中的限定通配符?和非限定通配符?
限定通配符對類進(jìn)行限制:
4.如何編寫一個(gè)泛型方法,讓它能接受泛型參數(shù)并返回泛型類型?
使用T, E or K,V等被廣泛認(rèn)可的類型占位符;最簡單的情況下,一個(gè)泛型方法可能會像這樣:
5.你可以把List<String>傳遞給一個(gè)接受List<Object>參數(shù)的方法嗎?
String是一種Object,看起來可以傳遞,實(shí)際不可以;因?yàn)長ist<String>是自定義泛型的,只能用來存儲String; List<Object>可以用來存儲所有數(shù)據(jù)類型。
6.Array可以用泛型么?
Array事實(shí)上并不支持泛型; Java一書中建議使用List來代替Array,因?yàn)長ist可以提供編譯期的類型安全保證,而Array卻不能。
7.如何阻止java中的“類型檢查”錯(cuò)誤?
原因:把泛型和原始數(shù)據(jù)類型混合使用,編譯時(shí)會出現(xiàn)該錯(cuò)誤。例如: List<String> rawList = new ArrayList()
8.是否可以使用Object代替通配符“?”使用?
List<?>?是一個(gè)未知類型的List,而List<Object> 其實(shí)是任意類型的List。 可以把List<String>, List<Integer>賦值給List<?>, 卻不能把List<String>賦值給 List<Object>。? ? ?
9.Java中List<Object>和原始類型的List的區(qū)別?
在編譯時(shí)編譯器不會對原始類型進(jìn)行類型安全檢查,卻會對帶參數(shù)的類型進(jìn)行檢查,通過使用Object作為類型,可以告知編譯器該方法可以接受任何類型的對象,比如String或Integer。
原始類型List可以存任何數(shù)據(jù)類型,但卻不能把List<String>傳遞給接受 List<Object>的方法,即指定泛型的List不能傳給Object; 因?yàn)闀a(chǎn)生編譯錯(cuò)誤。
10.List<String>和原始類型List之間的區(qū)別?
帶參數(shù)類型是類型安全的,由編譯器保證的,但原始類型List卻不是類型安全 的。 原始類型List可以存任何數(shù)據(jù)類型,List<String>只能存String類型
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: