Eh bien, tout d'abord, vous perdez de la mémoire avec le nouvel HashMap
appel à la création. Votre deuxième ligne ignore complètement la référence à cette table de hachage créée, la rendant ensuite disponible pour le garbage collector. Donc, ne faites pas ça, utilisez:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
Deuxièmement, le compilateur se plaint que vous convertissez l'objet en un HashMap
sans vérifier s'il s'agit d'un HashMap
. Mais, même si vous deviez faire:
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
Vous obtiendrez probablement toujours cet avertissement. Le problème est, getBean
renvoie Object
, donc on ne sait pas quel est le type. Le convertir HashMap
directement ne causerait pas de problème avec le second cas (et peut-être qu'il n'y aurait pas d'avertissement dans le premier cas, je ne sais pas à quel point le compilateur Java est pédant avec les avertissements pour Java 5). Cependant, vous le convertissez en a HashMap<String, String>
.
Les HashMaps sont vraiment des cartes qui prennent un objet comme clé et ont un objet comme valeur, HashMap<Object, Object>
si vous voulez. Ainsi, il n'y a aucune garantie que lorsque vous obtenez votre bean, il peut être représenté comme un HashMap<String, String>
car vous pourriez en avoir HashMap<Date, Calendar>
car la représentation non générique renvoyée peut avoir n'importe quel objet.
Si le code compile et que vous pouvez l'exécuter String value = map.get("thisString");
sans erreur, ne vous inquiétez pas de cet avertissement. Mais si la mappe n'est pas complètement composée de clés de chaîne pour les valeurs de chaîne, vous obtiendrez un ClassCastException
au moment de l'exécution, car les génériques ne peuvent pas empêcher cela de se produire dans ce cas.