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

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

為什么Java集合刪除方法不是泛型的?

為什么Java集合刪除方法不是泛型的?

弒天下 2019-06-28 10:48:57
為什么Java集合刪除方法不是泛型的?為什么集合.刪除(對象o)通用的?好像Collection<E>本可以boolean remove(E o);然后,當您意外嘗試刪除(例如)Set<String>而不是從Collection<String>,這將是編譯時錯誤,而不是稍后的調試問題。
查看完整描述

3 回答

?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

remove()(在Map以及Collection)不是泛型的,因為您應該能夠將任何類型的對象傳遞給remove()..移除的對象不必與傳入的對象類型相同。remove()它只要求它們是平等的。從.的規范remove()remove(o)移除對象e使.(o==null ? e==null : o.equals(e))true..請注意,沒有什么需要oe同樣的類型。這源于以下事實:equals()方法接受一個Object作為參數,而不僅僅是與對象相同的類型。

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


查看完整回答
反對 回復 2019-06-28
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

因為如果類型參數是通配符,則不能使用泛型刪除方法。

我似乎還記得用Map的get(Object)方法遇到了這個問題。在這種情況下,GET方法不是泛型的,盡管它應該被合理地期望被傳遞一個與第一個類型參數相同類型的對象。我意識到,如果您將通配符作為第一個類型參數傳遞給Maps,那么如果該參數是泛型的,則無法使用該方法從Map中獲取元素。通配符參數不能真正滿足,因為編譯器不能保證類型是正確的。我推測Add之所以是泛型的,是因為在將其添加到集合之前,您應該確保類型是正確的。然而,當移除一個對象時,如果類型不正確,那么它無論如何也不會匹配任何東西。如果該參數是通配符,則該方法將是不可用的,即使您可能有一個您可以保證屬于該集合的對象,因為您剛剛在上一行中得到了對它的引用.

我可能解釋得不太清楚,但這在我看來是合乎邏輯的。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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