亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Map.get(對象鍵)不(完全)泛型的原因是什么?

Map.get(對象鍵)不(完全)泛型的原因是什么?

慕田峪9158850 2019-06-05 11:11:06
Map.get(對象鍵)不(完全)泛型的原因是什么?的接口中沒有一個完全通用的get方法的原因是什么?java.util.Map<K, V>.為了澄清這個問題,方法的簽名是V get(Object key)而不是V get(K key)我想知道為什么(同樣的事情)remove, containsKey, containsValue).
查看完整描述

3 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

正如其他人提到的,為什么get()等不是泛型的,因為要檢索的條目的鍵不必與傳入的對象類型相同。get()該方法的規范只要求它們相等。這源于equals()方法接受對象作為參數,而不僅僅是與對象相同的類型。

雖然通常情況下,很多類都有equals()定義它的對象只能等于它自己類的對象,在Java中有很多地方都不是這樣的。例如,List.equals()表示如果兩個列表對象都是列表,并且具有相同的內容,則它們是相等的,即使它們是List..所以回到這個問題中的例子,根據這個方法的規范,有可能有一個Map<ArrayList, Something>讓我給你打電話get()帶著LinkedList作為參數,它應該檢索具有相同內容的列表的鍵。如果get()都是通用的并且限制了它的參數類型。


查看完整回答
反對 回復 2019-06-05
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

最相關的一句話:

一致地,Java集合框架(以及Google集合庫也是如此)的方法從不限制它們參數的類型,除非有必要防止集合被破壞。

作為一個原則,我不完全同意它-例如,.NET似乎可以要求正確的鍵類型-但值得遵循博客文章中的推理。(提到.NET后,值得解釋的是,在.NET中沒有問題的部分原因是更大在.NET中差異比較有限的問題.)


查看完整回答
反對 回復 2019-06-05
?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

合同如下:

更正式地說,如果這個映射包含從鍵k到值v的映射,那么(key=null?)K=NULL:鍵等于(K)),則此方法返回v;否則返回NULL。(最多只能有一個這樣的映射。)

(我強調)

因此,成功的密鑰查找取決于輸入鍵的相等方法的實現。那不是必然依賴于k類。


查看完整回答
反對 回復 2019-06-05
  • 3 回答
  • 0 關注
  • 1090 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號