2010-07-16 4 views
6

Possible en double:
Java Generics: Why Does Map.get() Ignore Type?Java Map <K,V>: Pourquoi obtenir (objet) pas obtenir (K)?

Quelqu'un pourrait-il s'il vous plaît expliquer pourquoi avec carte définit

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

Pourquoi get pas défini comme:

V get(K key) 

De même, pourquoi ces méthodes sont-elles tapées à Object, et non K et V respectivement?

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

Est-ce une rétro-compatibilité (avant 1.5)?

+0

Possible copie de http://stackoverflow.com/questions/1455138/java-generics-why-does-map-get-ignore- tapez – tonio

+0

D'accord - merci. Va marquer comme doublon. –

Répondre

0

but Modèles est d'appliquer un contrôle au moment de la compilation (vous ne pouvez pas mettre un chat dans un chien List), et pour simplifier le code du programmeur, en supprimant les distributions explicites.

Dans ces méthodes, il n'y a pas besoin de modèles. si vous comparez (avec "égal" un chat et un chien), cela n'a aucune incidence. De plus, deux objets de classes différentes peuvent être "égaux"! Une signature de méthode trop restrictive limiterait l'utilisation de la carte.

Note: les informations du modèle se sont uniquement vérifiées à la compilation, mais sont perdues après. Au moment de l'exécution, par réflexion, vous pouvez mettre un chat dans une liste de chien ...

Questions connexes