![](/img/trans.png)
[英]Why does java.util.Map.containsKey throw a null pointer exception for maps which don't support null keys?
[英]Does java.util.HashMap.containsKey(Object key) implementation violate java.util.Map.containsKey(Object key) documentation?
java.util.Map.containsKey(Object key)
文檔說: @throws ClassCastException if the key is of an inappropriate type for this map
。
java.util.HashMap.containsKey(Object key)
實現對此沒有任何說明。
我的問題:
如果我創建一個Map<String,String> map = new HashMap<>();
並使用Integer
調用containsKey
方法,該值被散列(作為String
),但該方法不會拋出Exception
。
順便說一下,4 的散列與“4”的散列不同。
這真的是預期的行為嗎?
這似乎是一個可選限制,不適用於HashMap
。
如containsKey
API所述:
[...]
拋出:
ClassCastException
- 如果該鍵的類型不適合該映射( 可選)
請注意“可選”,並查看鏈接的文檔:
一些集合實現對它們可能包含的元素有限制。 例如,有些實現禁止
null
元素,有些實現對其元素的類型有限制。 嘗試添加不合格的元素會引發未經檢查的異常,通常為NullPointerException
或ClassCastException
。 嘗試查詢不合格元素的存在可能會引發異常,或者可能只是返回 false; 一些實現會表現出前一種行為,而另一些會表現出后者。 更一般地,嘗試對不合格元素執行操作,其完成不會導致將不合格元素插入到集合中,這可能會引發異常,或者可能會成功,具體取決於實現的選擇。 在此接口的規范中,此類異常被標記為“可選”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.