en Java, l'interface de la carte est définie comme, pourquoi pas? p> je viens de heurter un bug méchant parce que La touche de type incorrecte est utilisée. Je pensais que le but des génériques est d'attraper une erreur de type tôt pendant la compilation. Cela vaingez-t-il ce but? P> p>
3 Réponses :
Pour ajouter à @subtenante, Java est conçu de manière à ce que Java soit toujours compatible avec l'arrière. Les génériques interdisent les puts du mauvais type, car cela ne casse pas la compatibilité en arrière. Le moyen facile de s'assurer que la bonne clé est utilisée est de le faire.
Number k= null; Number v= null; Map<Number,Number> mapped = new HashMap<Number,Number>() .......//set the key and value.......... k = double someDouble; v = int someInt; mapped.put(k, v) .....
Je ne vois vraiment pas où l'effacement vient dans ça. Erasure ne devrait être un problème que si vous faites quelque chose de "dangereux".
Met () utilise des types de génériques. Je ne me plains que d'obtenir.
@Zz coder, j'ai adressé l'entrée dans l'ensemble de code principal, le deuxième ensemble de code Je soulignais un autre problème commun que certains ont utilisé des génériques
Un objet d'un type peut être .equals () code> à un objet d'un autre type. get () code> nécessite uniquement que l'objet que vous lui donnez soit .fequals () code> à la touche que vous obtenez p>
Ce n'est pas vrai. Je reçois la classeCastException afin que le type doit correspondre.
Si vous obtenez une classeCastException, il est mal mis en œuvre. C'est une meilleure idée de retourner false si les types sont incompatibles.
Certaines bonnes réponses peuvent être trouvées ici: Quelles sont les raisons pour lesquelles map.get (clé d'objet) n'est pas (entièrement) générique