溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java7簡化變參方法是什么

發(fā)布時間:2022-01-07 17:42:58 來源:億速云 閱讀:116 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“java7簡化變參方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“java7簡化變參方法是什么”吧!

這是所有修改里最簡單的一個,只是去掉了方法簽名中同時出現(xiàn)變參和泛型時才會出現(xiàn)的類型警告信息。

public static <T> Collection<T> doSomething(T... entries) { ...}

還在?很好。這到底是怎么回事?

變參方法是指參數(shù)列表末尾是數(shù)量不定但類型相同的參數(shù)方法。但你可能還不知道變參方法是如何實(shí)現(xiàn)的?;旧希谐霈F(xiàn)在末尾的變參都會被放到一個數(shù)組中(由編譯器自動創(chuàng)建),并作為一個參數(shù)傳入。

這是個好主意,但是存在一個公認(rèn)的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)建這個類型的實(shí)例,所以你不得不硬著頭皮(或至少忘掉警告)硬生生地把原始類型(HashMap數(shù)組)的實(shí)例塞給warnHm。

這兩個特性(編譯時生成數(shù)組的變參方法和已知泛型數(shù)組不能是可實(shí)例化類型)碰到一起時,會令人有點(diǎn)頭疼??纯聪旅孢@段代碼:

HashMap<String, String> hm1 = new HashMap<>();HashMap<String, String> hm2 = new HashMapCollection<HashMap<String, String>> coll = doSomething(hm1,hm2);

編譯器會嘗試創(chuàng)建一個包含hm1和hm2的數(shù)組,但這種類型的數(shù)組應(yīng)該是被嚴(yán)格禁止使用的。面對這種進(jìn)退兩難的局面,編譯器只好違心地創(chuàng)建一個本來不應(yīng)出現(xiàn)的泛型數(shù)組實(shí)例,但它又覺得自己不能保持沉默,所以還得嘟囔著警告你這是“未經(jīng)檢查或不安全的操作”。

從類型系統(tǒng)的角度看,這非常合理。但可憐的開發(fā)人員本想使用一個十分靠譜的API,一看到這些嚇人的警告,卻得不到任何解釋,不免會內(nèi)心忐忑。

到此,相信大家對“java7簡化變參方法是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI