Eh bien, tout d'abord, vous gaspillez de la mémoire avec le nouveau HashMap
appel à la création. Votre deuxième ligne ignore complètement la référence à cette hashmap créée, la rendant ainsi disponible pour le ramasseur d'ordures. Donc, ne faites pas ça, utilisez :
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
Deuxièmement, le compilateur se plaint du fait que vous avez transformé l'objet en un HashMap
sans vérifier s'il s'agit d'un HashMap
. Mais, même si vous le faisiez :
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
Vous recevriez probablement toujours cet avertissement. Le problème est que, getBean
renvoie à Object
On ne sait donc pas de quel type il s'agit. En le convertissant en HashMap
ne causerait pas directement le problème dans le second cas (et peut-être n'y aurait-il 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 un HashMap<String, String>
.
Les HashMaps sont en fait 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 obtiendrez votre haricot, il pourra être représenté en tant que HashMap<String, String>
parce que vous auriez pu HashMap<Date, Calendar>
car la représentation non générique qui est renvoyée peut comporter n'importe quel objet.
Si le code se compile, et que vous pouvez exécuter String value = map.get("thisString");
sans aucune erreur, ne vous inquiétez pas de cet avertissement. Mais si la carte n'est pas entièrement composée de clés de type chaîne de caractères et de valeurs de type chaîne de caractères, vous obtiendrez un message d'avertissement. ClassCastException
au moment de l'exécution, car les génériques ne peuvent pas empêcher que cela se produise dans ce cas.
0 votes
J'ai trouvé une routine pour vérifier le cast vers un HashMap paramétré, ce qui élimine l'avertissement de cast non vérifié : lien Je dirais que c'est la solution "correcte", mais on peut se demander si cela en vaut la peine ou non :)
0 votes
Related/dupe : Comment traiter les avertissements de castings non vérifiés ?
0 votes
Duplicata possible de Comment traiter les avertissements de castings non vérifiés ?