十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇內(nèi)容主要講解“Java泛型的面試題有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Java泛型的面試題有哪些”吧!
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供烈山網(wǎng)站建設(shè)、烈山做網(wǎng)站、烈山網(wǎng)站設(shè)計、烈山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、烈山企業(yè)網(wǎng)站模板建站服務(wù),10多年烈山做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
1.Java中的泛型是什么 ? 使用泛型的好處是什么?
這是在各種Java泛型面試中,一開場你就會被問到的問題中的一個,主要集中在初級和中級面試中。那些擁有Java1.4或更早版本的開發(fā)背景的人都知道,在集合中存儲對象并在使用前進行類型轉(zhuǎn)換是多么的不方便。
泛型防止了那種情況的發(fā)生。它提供了編譯期的類型安全,確保你只能把正確類型的對象放入集合中,避免了在運行時出現(xiàn)ClassCastException。
2. Java的泛型是如何工作的 ? 什么是類型擦除 ?
這是一道更好的泛型面試題。泛型是通過類型擦除來實現(xiàn)的,編譯器在編譯時擦除了所有類型相關(guān)的信息,所以在運行時不存在任何類型相關(guān)的信息。例如List
你無法在運行時訪問到類型參數(shù),因為編譯器已經(jīng)把泛型類型轉(zhuǎn)換成了原始類型。根據(jù)你對這個泛型問題的回答情況,你會得到一些后續(xù)提問,比如為什么泛型是由類型擦除來實現(xiàn)的或者給你展示一些會導(dǎo)致編譯器出錯的錯誤泛型代碼。
3. 什么是泛型中的限定通配符和非限定通配符 ?
這是另一個非常流行的Java泛型面試題。限定通配符對類型進行了限制。有兩種限定通配符,一種是 extends T>它通過確保類型必須是T的子類來設(shè)定類型的上界,另一種是 super T>它通過確保類型必須是T的父類來設(shè)定類型的下界。泛型類型必須用限定內(nèi)的類型來進行初始化,否則會導(dǎo)致編譯錯誤。另一方面>表示了非限定通配符,因為>可以用任意類型來替代。
4. List extends T>和List super T>之間有什么區(qū)別 ?
這和上一個面試題有聯(lián)系,有時面試官會用這個問題來評估你對泛型的理解,而不是直接問你什么是限定通配符和非限定通配符。這兩個List的聲明都是限定通配符的例子,List extends T>可以接受任何繼承自T的類型的List,而List super T>可以接受任何T的父類構(gòu)成的List。例如List extends Number>可以接受List
5. 如何編寫一個泛型方法,讓它能接受泛型參數(shù)并返回泛型類型?
編寫泛型方法并不困難,你需要用泛型類型來替代原始類型,比如使用T, E or K,V等被廣泛認可的類型占位符。泛型方法的例子請參閱Java集合類框架。最簡單的情況下,一個泛型方法可能會像這樣:
public V put(K key, V value) { return cache.put(key, value);}
6. Java中如何使用泛型編寫帶有參數(shù)的類?
這是上一道面試題的延伸。面試官可能會要求你用泛型編寫一個類型安全的類,而不是編寫一個泛型方法。關(guān)鍵仍然是使用泛型類型來代替原始類型,而且要使用JDK中采用的標(biāo)準(zhǔn)占位符。
7. 編寫一段泛型程序來實現(xiàn)LRU緩存?
對于喜歡Java編程的人來說這相當(dāng)于是一次練習(xí)。給你個提示,LinkedHashMap可以用來實現(xiàn)固定大小的LRU緩存,當(dāng)LRU緩存已經(jīng)滿了的時候,它會把最老的鍵值對移出緩存。
LinkedHashMap提供了一個稱為removeEldestEntry()的方法,該方法會被put()和putAll()調(diào)用來刪除最老的鍵值對。當(dāng)然,如果你已經(jīng)編寫了一個可運行的JUnit測試,你也可以隨意編寫你自己的實現(xiàn)代碼。
8. 你可以把List
對任何一個不太熟悉泛型的人來說,這個Java泛型題目看起來令人疑惑,因為乍看起來String是一種Object,所以List
如果你再深一步考慮,你會發(fā)現(xiàn)Java這樣做是有意義的,因為List