關(guān)于Java泛型的面試題
1. Java中的泛型是什么 ? 使用泛型的好處是什么?
這是在各種Java泛型面試中,一開場你就會被問到的問題中的一個,主要集中在初級和中級面試中。那些擁有Java1.4或更早版本的開發(fā)背景的人 都知道,在集合中存儲對象并在使用前進(jìn)行類型轉(zhuǎn)換是多么的不方便。泛型防止了那種情況的發(fā)生。它提供了編譯期的類型安全,確保你只能把正確類型的對象放入 集合中,避免了在運(yùn)行時出現(xiàn)ClassCastException。
2. Java的泛型是如何工作的 ? 什么是類型擦除 ?
這是一道更好的泛型面試題。泛型是通過類型擦除來實(shí)現(xiàn)的,編譯器在編譯時擦除了所有類型相關(guān)的信息,所以在運(yùn)行時不存在任何類型相關(guān)的信息。例如 List
3. 什么是泛型中的限定通配符和非限定通配符 ?
這是另一個非常流行的Java泛型面試題。限定通配符對類型進(jìn)行了限制。有兩種限定通配符,一種是它通過確保類型必須是T的子類來設(shè)定類型的上界,另一種是它通過確保類型必須是T的父類來設(shè)定類型的下界。泛型類型必須用限定內(nèi)的類型來進(jìn)行初始化,否則會導(dǎo)致編譯錯誤。另一方面可以用任意類型來替代。更多信息請參閱我的文章泛型中限定通配符和非限定通配符之間的區(qū)別。
4. List和List 之間有什么區(qū)別 ?
這和上一個面試題有聯(lián)系,有時面試官會用這個問題來評估你對泛型的理解,而不是直接問你什么是限定通配符和非限定通配符。這兩個List的聲明都是 限定通配符的例子,List可以接受任何繼承自T的類型的List,而List可以接受任何T的父類構(gòu)成的List。例如List可以接受List
List
List
List
listOfAnyType = listOfString; //legal
listOfAnyType = listOfInteger; //legal
listOfObjectType = (List
想了解更多關(guān)于通配符的信息請查看Java中的泛型通配符示例
List
該題類似于“原始類型和帶參數(shù)類型之間有什么區(qū)別”。帶參數(shù)類型是類型安全的,而且其類型安全是由編譯器保證的,但原始類型List卻不是類型安全 的。你不能把String之外的任何其它類型的Object存入String類型的List中,而你可以把任何類型的對象存入原始List中。使用泛型的 帶參數(shù)類型你不需要進(jìn)行類型轉(zhuǎn)換,但是對于原始類型,你則需要進(jìn)行顯式的類型轉(zhuǎn)換。
List listOfRawTypes = new ArrayList();
listOfRawTypes.add(“abc”);
listOfRawTypes.add(123); //編譯器允許這樣 – 運(yùn)行時卻會出現(xiàn)異常
String item = (String) listOfRawTypes.get(0); //需要顯式的類型轉(zhuǎn)換
item = (String) listOfRawTypes.get(1); //拋ClassCastException,因?yàn)镮nteger不能被轉(zhuǎn)換為String
List
listOfString.add(“abcd”);
listOfString.add(1234); //編譯錯誤,比在運(yùn)行時拋異常要好
item = listOfString.get(0); //不需要顯式的類型轉(zhuǎn)換 – 編譯器自動轉(zhuǎn)換
這些都是Java泛型面試中 頻繁出現(xiàn)的問題及其答案。所有這些面試題都不困難,其實(shí)它們都是基于泛型的基礎(chǔ)知識。任何對泛型有不錯了解的Java程序員都肯定熟知這些泛型題目。如果 你有任何好的面試題,不管是在什么面試中碰到的,或者如果你想知道任何Java泛型面試題的答案。
【關(guān)于Java泛型的面試題】相關(guān)文章:
Java的面試題和答案10-30
Java軟件測試面試題06-20
java多線程面試題03-19
華為的Java面試題及答案11-22
公司JAVA開發(fā)面試題06-03
java前端開發(fā)面試題05-09
java開發(fā)面試題型與技巧08-06
15個Java多線程面試題及回答09-24