Bem, primeiro de tudo, você está desperdiçando memória com a nova HashMap
chamada de criação. Sua segunda linha desconsidera completamente a referência a este hashmap criado, disponibilizando-o para o coletor de lixo. Portanto, não faça isso, use:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
Em segundo lugar, o compilador está reclamando que você lança o objeto para a HashMap
sem verificar se é a HashMap
. Mas, mesmo se você fizesse:
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
Você provavelmente ainda receberia esse aviso. O problema é que getBean
retorna Object
, então não se sabe qual é o tipo. Convertê-lo para HashMap
diretamente não causaria o problema com o segundo caso (e talvez não houvesse um aviso no primeiro caso, não tenho certeza de quão pedante é o compilador Java com avisos para o Java 5). No entanto, você está convertendo para a HashMap<String, String>
.
HashMaps são realmente mapas que pegam um objeto como chave e têm um objeto como valor, HashMap<Object, Object>
se você preferir. Portanto, não há garantia de que, quando você obtiver seu bean, ele possa ser representado como HashMap<String, String>
porque você poderia ter, HashMap<Date, Calendar>
porque a representação não genérica retornada pode ter qualquer objeto.
Se o código for compilado e você puder executar String value = map.get("thisString");
sem erros, não se preocupe com esse aviso. Mas se o mapa não for completamente de chaves de string para valores de string, você receberá um ClassCastException
em tempo de execução, porque os genéricos não podem impedir que isso aconteça nesse caso.