chance chance - 22 days ago 9
Java Question

Why Map.containsKey() takes an Object parameter instead of a speciallized type?


Possible Duplicate:

What are the reasons why Map.get(Object key) is not (fully) generic

Java Generics: Why Does Map.get() Ignore Type?




Java Map interface is declared like this:

Interface Map<K,V>


It has such a method:

boolean containsKey(Object key)


Why not
boolean containsKey(K key)
?

On the contrary, the List interface has add method that takes parameter of generic type instead of
Object
:

boolean add(E e).

Answer

It's the same reason why you can't add anything to a List<? extends E> because the compiler can't guarantee the type safety (and type erasure makes a runtime check impossible).

This means that when you get a Map<? extends K,V> you wouldn't be able to call contains(K) on it. however contains is general enough that passing random Objects to it won't damage the interface (but makes some errors harder to pick up).