Bueno, antes que nada, está desperdiciando memoria con la nueva llamada de creación HashMap
. Su segunda línea ignora por completo la referencia a este hashmap creado, por lo que está disponible para el recolector de elementos no utilizados. Por lo tanto, no haga eso, su uso:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
En segundo lugar, el compilador se queja de que lanzas el objeto a una HashMap
sin comprobar si es un HashMap
. Pero, incluso si tuviera que hacer:
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
Probablemente recibirá esta advertencia. El problema es que getBean
devuelve Object
, por lo que se desconoce de qué tipo es. Convertirlo a HashMap
directamente no causaría el problema con el segundo caso (y tal vez no habría una advertencia en el primer caso, no estoy seguro de cuán pedante es el compilador de Java con advertencias para Java 5). Sin embargo, lo está convirtiendo a HashMap<String, String>
.
Los HashMaps son realmente mapas que toman un objeto como clave y tienen un objeto como valor, HashMap<Object, Object>
si se quiere. Por lo tanto, no hay garantía de que cuando obtenga su bean pueda representarse como HashMap<String, String>
porque podría tener HashMap<Date, Calendar>
porque la representación no genérica que se devuelve puede tener cualquier objeto.
Si el código se compila y puede ejecutar String value = map.get("thisString");
sin ningún error, no se preocupe por esta advertencia. Pero si el mapa no es completamente de claves de cadena para valores de cadena, obtendrá un ClassCastException
en tiempo de ejecución, porque los genéricos no pueden bloquear esto en este caso.
Relacionado/víctima: [¿Cómo enviar advertencias elenco sin marcar?] (Http://stackoverflow.com/q/509076) – blahdiblah
posible duplicado de [¿Cómo abordo las advertencias de casteo no revisadas?] (http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings) –
Se me ocurrió una rutina para verificar el reparto al HashMap parametrizado, que elimina la advertencia de lanzamiento sin marcar: [link] (http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings/509230#509230) Diría esto es la solución "correcta", pero si vale la pena puede ser discutible. :) – skiphoppy