Java List能存字符串對象嗎?
IDEA分享:idea破解篇
Navicat分享:Navicat破解篇
背景
今天在寫代碼時(shí),想到一個有趣的面試題,List<Integer>能存String對象嗎?
粗看好像問了一個Java語法相關(guān)的知識點(diǎn),其實(shí)我想考的是你對Java泛型的理解。
回答不能,那么可以說對Java泛型幾乎是沒有理解,而僅僅回答能,也是遠(yuǎn)遠(yuǎn)不夠的。
一、怎么存?
首先來講講怎么存,話不多說,直接上代碼,也不復(fù)雜大家都能看懂。
我們通過反射來實(shí)現(xiàn),最終打印輸出的內(nèi)容是[1, String],是不是有點(diǎn)匪夷所思。當(dāng)然這里需要提一點(diǎn),直接通過add方法來添加"String"字符串對象,顯然是不可行的。
或許回答不能的,這個結(jié)論應(yīng)該從這里來,市面上的idea在編寫時(shí)也都會報(bào)錯。
二、為什么能存?
關(guān)鍵點(diǎn)來了,我所期望的是面試者能提出泛型擦除,與Java的泛型只在編譯期生效。
簡單整個筆試可能出現(xiàn)的題,或許又能加深你對它的印象。
接著問,以下兩個方法能否定義在同一個類的成員方法中,
顯然也是不能的,另外有一點(diǎn)我可能還會問一下,以上代碼入?yún)⒁恢碌脑捠遣皇欠椒ǖ闹剌d?顯然也不是,方法的重載不考慮返回值
三、泛型存在的意義?
緊接著,又一個關(guān)鍵點(diǎn)來了,既然有擦除那么泛型存在的意義是?
1、泛型避免了代碼在運(yùn)行時(shí)才發(fā)現(xiàn)問題,例如上章節(jié)的例子。
2、如果都是使用Object基類替代,使用時(shí)需要強(qiáng)轉(zhuǎn),泛型減少了ClassCastException發(fā)生。
3、減少來自強(qiáng)制類型轉(zhuǎn)換的性能消耗。
轉(zhuǎn)載原作者鏈接:mp.weixin.qq.com/s/nYp_7t83LC9U4Iu3DSar4Q
更多優(yōu)秀文章,請通過一下獲取
kdocs.cn/l/cg7vXzuZCKlM