Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

generics

map

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).
like image 873
chance Avatar asked Dec 08 '11 16:12

chance


1 Answers

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).

like image 166
ratchet freak Avatar answered Nov 15 '22 00:11

ratchet freak