可能重复:
What are the reasons why Map.get(Object key) is not (fully) generic
Java Generics: Why Does Map.get() Ignore Type?
Java Map接口声明如下:
Interface Map<K,V>
它有这样一种方法:
boolean containsKey(Object key)
为什么不呢
boolean containsKey(K key)
?
相反,List接口的add方法采用泛型类型的参数而不是Object
:
boolean add(E e).
答案 0 :(得分:2)
这与为List<? extends E>
添加任何内容的原因相同,因为编译器无法保证类型安全(并且类型擦除会使运行时检查无法进行)。
这意味着当您获得Map<? extends K,V>
时,您将无法在其上调用contains(K)
。但是contains
足够通用,将随机Object
传递给它不会损坏界面(但会使一些错误更难以获取)。
答案 1 :(得分:0)
界面在操作方式上是一致的,但我无法给出最初的原因。
Interface Map<K,V>
boolean containsKey(Object key)
V put(K key, V value)
Interface List<E>
boolean contains(Object o)
boolean add(E e)
在这两种情况下,contains方法都使用Objects,插入操作采用泛型类型。