2010-07-16 15 views
6

Duplicar posibles:
Java Generics: Why Does Map.get() Ignore Type?Java Map <K,V>: ¿Por qué get (object) not get (K)?

Podría alguien explicar por qué con Mapa define

V put(K key,V value); 
V get(Object key); 

¿Por qué no get define como:

V get(K key) 

De manera similar, ¿por qué se escriben estos métodos en Object, y no en K y V, respectivamente?

boolean containsKey(Object key); // Why not K? 
boolean containsValue(Object value); // Why not V? 

¿Es esto una compatibilidad retroactiva (pre 1.5)?

+0

Posible duplicado de http://stackoverflow.com/questions/1455138/java-generics-why-does-map-get-ignore- tipo – tonio

+0

De acuerdo, gracias. Se marcará como duplicado. –

Respuesta

0

plantillas objetivo es hacer cumplir el control en tiempo de compilación (no se puede poner un gato en un perro List), y para simplificar el código del programador, suprimiendo los moldes explícitos.

En estos métodos, no hay necesidad de plantillas. si compara (con "igual" un gato y un perro), no tiene incidencia. ¡Más, dos objetos de diferentes clases pueden ser "iguales"! Una firma de método demasiado restrictiva limitaría el uso del Mapa.

Nota: la información de la plantilla solo se verifica en la compilación, pero se pierde después. En tiempo de ejecución, por reflexión, puede poner un Cat en una lista de perros ...