java.util.HashMap.containsKey(Object key)实现是否违反了java.util.Map.containsKey(Object key)文档?

时间:2018-04-05 15:10:32

标签: java interface hashmap

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<>();并使用containsKey调用Integer方法,则会对值进行哈希处理(作为String),但该方法不会抛出Exception 1}}。

Btw:4的散列与“4”的散列不同。

这真的是预期的行为吗?

提前THX!

1 个答案:

答案 0 :(得分:8)

这似乎是一项可选限制,未在HashMap中应用。

正如API containsKey中所述:

  

[...]

     

<强>抛出:       ClassCastException - 如果该地图的密钥类型不合适(optional

请注意&#34;可选&#34;,并查看已关联的documentation

  

某些集合实现对它们可能包含的元素有限制。例如,某些实现禁止null元素,有些实现对其元素类型有限制。尝试添加不合格的元素会引发未经检查的异常,通常为NullPointerExceptionClassCastException。尝试查询不合格元素的存在可能会引发异常,或者它可能只是返回false;一些实现将展示前一种行为,一些将展示后者。更一般地,尝试对不合格的元素进行操作,其完成不会导致将不合格的元素插入到集合中,可以在实现的选择中抛出异常或者它可以成功。此类例外标记为&#34;可选&#34;在此接口的规范中。