Eh bien, tout d'abord, vous gaspillez de la mémoire avec le nouvel appel de création HashMap
. Votre deuxième ligne ignore complètement la référence à cette hashmap créée, la rendant alors disponible au garbage collector. Alors, ne faites pas cela, utilisez:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
En second lieu, le compilateur se plaint que vous lancez l'objet à un HashMap
sans vérifier si elle est 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 en HashMap
directement ne causerait pas le problème avec le second cas (et peut-être qu'il n'y aurait pas d'avertissement dans le premier cas, je ne suis pas sûr de la pédantité du compilateur Java avec les avertissements pour Java 5). Cependant, vous le convertissez en HashMap<String, String>
. Les HashMaps sont en réalité des cartes qui prennent un objet comme une 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 HashMap<String, String>
parce que vous pourriez avoir HashMap<Date, Calendar>
parce que la représentation non générique qui est retournée peut avoir des objets.
Si le code 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 complètement de chaînes de caractères à des valeurs de chaîne, vous obtiendrez un ClassCastException
lors de l'exécution, car les génériques ne peuvent pas bloquer cela dans ce cas.
connexes/duper: [Comment puis-je adresser des avertissements de la distribution non vérifiées?] (Http://stackoverflow.com/q/509076) – blahdiblah
double possible de [Comment traiter les avertissements de cast non vérifiés?] (http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings) –
Je suis venu avec une routine pour vérifier réellement la distribution à HashMap paramétré, ce qui élimine l'avertissement de cast décochée: [link] (http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings/509230#509230) Je dirais que est la solution "correcte", mais si elle vaut la peine d'être discutable. :) – skiphoppy