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