java7 簡(jiǎn)化變參方法調(diào)用實(shí)例方法
這是所有修改里最簡(jiǎn)單的一個(gè),只是去掉了方法簽名中同時(shí)出現(xiàn)變參和泛型時(shí)才會(huì)出現(xiàn)的類型警告信息。
換句話說,除非你寫代碼時(shí)習(xí)慣使用類型為T的不定數(shù)量參數(shù),并且要用它們創(chuàng)建集合,否則你就可以進(jìn)入下一節(jié)了。如果你想要寫下面這種代碼,那就繼續(xù)閱讀本節(jié):
public static <T> Collection<T> doSomething(T... entries) { ... }
還在?很好。這到底是怎么回事?
變參方法是指參數(shù)列表末尾是數(shù)量不定但類型相同的參數(shù)方法。但你可能還不知道變參方法是如何實(shí)現(xiàn)的?;旧?,所有出現(xiàn)在末尾的變參都會(huì)被放到一個(gè)數(shù)組中(由編譯器自動(dòng)創(chuàng)建),并作為一個(gè)參數(shù)傳入。
這是個(gè)好主意,但是存在一個(gè)公認(rèn)的Java泛型缺陷——不允許創(chuàng)建已知類型的泛型數(shù)組。比如下面這段代碼,編譯就無法通過:
HashMap<String, String>[] arrayHm = new HashMap<>[2];
不可以創(chuàng)建特定泛型的數(shù)組,只能這樣寫:
HashMap<String, String>[] warnHm = new HashMap[2];
可這樣編譯器會(huì)給出一個(gè)只能忽略的警告。你可以將warnHm的類型定義為HashMap<String,String>數(shù)組,但不能創(chuàng)建這個(gè)類型的實(shí)例,所以你不得不硬著頭皮(或至少忘掉警告)硬生生地把原始類型(HashMap數(shù)組)的實(shí)例塞給warnHm。
這兩個(gè)特性(編譯時(shí)生成數(shù)組的變參方法和已知泛型數(shù)組不能是可實(shí)例化類型)碰到一起時(shí),會(huì)令人有點(diǎn)頭疼??纯聪旅孢@段代碼:
HashMap<String, String> hm1 = new HashMap<>(); HashMap<String, String> hm2 = new HashMap Collection<HashMap<String, String>> coll = doSomething(hm1,hm2);
編譯器會(huì)嘗試創(chuàng)建一個(gè)包含hm1和hm2的數(shù)組,但這種類型的數(shù)組應(yīng)該是被嚴(yán)格禁止使用的。面對(duì)這種進(jìn)退兩難的局面,編譯器只好違心地創(chuàng)建一個(gè)本來不應(yīng)出現(xiàn)的泛型數(shù)組實(shí)例,但它又覺得自己不能保持沉默,所以還得嘟囔著警告你這是“未經(jīng)檢查或不安全的操作”。
從類型系統(tǒng)的角度看,這非常合理。但可憐的開發(fā)人員本想使用一個(gè)十分靠譜的API,一看到這些嚇人的警告,卻得不到任何解釋,不免會(huì)內(nèi)心忐忑。
以上就是本次介紹的全部知識(shí)點(diǎn)內(nèi)容,希望我們整理的內(nèi)容能夠幫助到大家。
相關(guān)文章
Spring Security基于散列加密方案實(shí)現(xiàn)自動(dòng)登錄功能
為了提高項(xiàng)目的用戶體驗(yàn),我們可以在項(xiàng)目中添加自動(dòng)登錄功能,當(dāng)然也要給用戶提供退出登錄的功能。接下來學(xué)習(xí)下Spring Security基于散列加密方案實(shí)現(xiàn)自動(dòng)登錄功能,一起看看吧2021-09-09SpringMvc自動(dòng)裝箱及GET請(qǐng)求參數(shù)原理解析
這篇文章主要介紹了SpringMvc自動(dòng)裝箱及GET請(qǐng)求參數(shù)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09關(guān)于Nacos和Eureka的區(qū)別及說明
這篇文章主要介紹了關(guān)于Nacos和Eureka的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06基于SpringBoot和PostGIS的某國(guó)基地可視化實(shí)戰(zhàn)
本文以Java開發(fā)語言為例,使用SpringBoot框架來進(jìn)行后臺(tái)開發(fā),詳細(xì)講解如何使用Leaflet對(duì)PostGIS的全球基地信息進(jìn)行Web可視化,最后分享Web可視化結(jié)果,感興趣的朋友跟隨小編一起看看吧2024-08-08基于Java8實(shí)現(xiàn)提高Excel讀寫效率
這篇文章主要介紹了基于Java8實(shí)現(xiàn)提高Excel讀寫效率,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11springboot增加注解緩存@Cacheable的實(shí)現(xiàn)
這篇文章主要介紹了springboot增加注解緩存@Cacheable的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java實(shí)現(xiàn)數(shù)獨(dú)小游戲
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)數(shù)獨(dú)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05Mybatis插件擴(kuò)展及與Spring整合原理分析
這篇文章主要介紹了Mybatis插件擴(kuò)展及與Spring整合原理,本文通過實(shí)例文字相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Spring Security攔截器引起Java CORS跨域失敗的問題及解決
這篇文章主要介紹了Spring Security攔截器引起Java CORS跨域失敗的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07