更新時間:2020-09-08 17:04:26 來源:動力節點 瀏覽2851次
Java中的泛型是什么?使用泛型的好處是什么?
泛型是Java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。
好處:
1、類型安全,提供編譯期間的類型檢測
2、前后兼容
3、泛化代碼,代碼可以更多的重復利用
4、性能較高,用GJ(泛型Java)編寫的代碼可以為java編譯器和虛擬機帶來更多的類型信息,這些信息對java程序做進一步優化提供條件。
Java的泛型是如何工作的?什么是類型擦除?如何工作?
1、類型檢查:在生成字節碼之前提供類型檢查
2、類型擦除:所有類型參數都用他們的限定類型替換,包括類、變量和方法(類型擦除)
3、如果類型擦除和多態性發生了沖突時,則在子類中生成橋方法解決
4、如果調用泛型方法的返回類型被擦除,則在調用該方法時插入強制類型轉換
類型擦除:
所有類型參數都用他們的限定類型替換:
比如T->Object?extends BaseClass->BaseClass
如何工作:
泛型是通過類型擦除來實現的,編譯器在編譯時擦除了所有類型相關的信息,所以在運行時不存在任何類型相關的信息。例如List<String>在運行時僅用一個List來表示。這樣做的目的,是確保能和Java 5之前的版本開發二進制類庫進行兼容。你無法在運行時訪問到類型參數,因為編譯器已經把泛型類型轉換成了原始類型。根據你對這個泛型問題的回答情況,你會得到一些后續提問,比如為什么泛型是由類型擦除來實現的或者給你展示一些會導致編譯器出錯的錯誤泛型代碼。
你可以把List
對任何一個不太熟悉泛型的人來說,這個Java泛型題目看起來令人疑惑,因為乍看起來String是一種Object,所以 List
List
List
objectList = stringList; //compilation error incompatible types
如何阻止Java中的類型未檢查的警告?
如果你把泛型和原始類型混合起來使用,例如下列代碼,java 5的javac編譯器會產生類型未檢查的警告,例如
List
注意: Hello.java使用了未檢查或稱為不安全的操作;
這種警告可以使用@SuppressWarnings(“unchecked”)注解來屏蔽。
Java中List
原始類型和帶參數類型
這道題的考察點在于對泛型中原始類型的正確理解。它們之間的第二點區別是,你可以把任何帶參數的類型傳遞給原始類型List,但卻不能把List
編寫一段泛型程序來實現LRU緩存?
對于喜歡Java編程的人來說這相當于是一次練習。給你個提示,LinkedHashMap可以用來實現固定大小的LRU緩存,當LRU緩存已經滿了的時候,它會把最老的鍵值對移出緩存。
LinkedHashMap提供了一個稱為removeEldestEntry()的方法,該方法會被put() 和putAll()調用來刪除最老的鍵值對。當然,如果你已經編寫了一個可運行的JUnit測試,你也可以隨意編寫你自己的實現代碼。
以上就是動力節點Java培訓機構的小編針對“互聯網面試常見Java泛型筆試題”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習