Bene, prima di tutto, stai sprecando memoria con la nuova HashMap
chiamata di creazione. La tua seconda riga ignora completamente il riferimento a questa hashmap creata, rendendola quindi disponibile per il Garbage Collector. Quindi, non farlo, usa:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
In secondo luogo, il compilatore si lamenta di aver lanciato l'oggetto su a HashMap
senza controllare se è a HashMap
. Ma, anche se dovessi fare:
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
Probabilmente riceveresti ancora questo avviso. Il problema è, getBean
ritorna Object
, quindi non si sa quale sia il tipo. La conversione HashMap
diretta in non causerebbe il problema con il secondo caso (e forse non ci sarebbe un avviso nel primo caso, non sono sicuro di quanto sia pedante il compilatore Java con avvisi per Java 5). Tuttavia, lo stai convertendo in aHashMap<String, String>
.
Le hashmap sono in realtà mappe che prendono un oggetto come chiave e hanno un oggetto come valore, HashMap<Object, Object>
se vuoi. Pertanto, non vi è alcuna garanzia che, quando si ottiene il proprio bean, possa essere rappresentato come HashMap<String, String>
perché si potrebbe avereHashMap<Date, Calendar>
perché la rappresentazione non generica che viene restituita può contenere qualsiasi oggetto.
Se il codice viene compilato e puoi eseguirlo String value = map.get("thisString");
senza errori, non preoccuparti per questo avviso. Ma se la mappa non è completamente composta da chiavi di stringa e valori di stringa, otterrai un ClassCastException
runtime, poiché i generici non possono impedire che ciò accada in questo caso.