Pessoal alguem ja viu isso?
Tenho um map<String, String> e quando uso map.get(“chave”) ele me retorna um Long.
No meu caso o valor é um número que busco no banco via HQL
Pessoal alguem ja viu isso?
Tenho um map<String, String> e quando uso map.get(“chave”) ele me retorna um Long.
No meu caso o valor é um número que busco no banco via HQL
Veja este exemplo:
Map<String, String> map = new HashMap<String, String>();
putValue(map);
map.get("chave"); // Essa chamada retornará um Long
///...
void putValue(Map map) {
map.put("chave", new Long(1));
}
Isso é possível devido a duas características do Generics:
Resumindo… é muito fácil de burlar a parametrização de tipos. É uma ferramenta que ajuda a evitar alguns erros, mas ao mesmo tempo é flexível suficiente para ser ignorada, depende de o desenvolvedor saber o que está fazendo.
Então, voltando ao seu caso, provavelmente o código que insere o valor no mapa não está respeitando a parametrização <String, String>. Terá que investigar melhor esse trecho, para entender por que está dessa forma e como resolver.
Obrigado Gomes pela resposta, resolvi o problema da seguinte maneira para evitar problemas em tempo de compilação e execução:
for (Map<String, String> mapa : lista) {
Object o = mapa.get("numDemandas");
Long numero = (Long) o;
qtde = qtde + numero.intValue();
}
Pois se eu pegasse como string ocorria erro de conversão de Long para String, se pegasse como Long dava problema de compilação, ai utilizei este workarround srrs
Vai funcionar, mas se eu fosse você tentaria ir mais a fundo no problema para compreender melhor o que está acontecendo.
Algumas perguntas que você poderia tentar resolver investigando o código:
Esse mapa deveria conter apenas valores String? Nesse caso o código que colocou um Long está errado, ele é que deveria ser corrigido.
ou pelo contrário,
O mapa deve justamente conter objetos de tipos variados, de acordo com o tipo dos valores no banco? Nesse caso o que está errado é armazenar em um Map<String, String>. Poderia estar em um Map<String, Object> , ou em um objeto customizado que encapsula o Map.
Mantendo desse jeito, você perde o benefício do Generics, pois a especificação de tipo não é confiável (“O Map é <String,String>, mas pode conter qualquer coisa”). Isso pode se tornar um pesadelo na manutenção do sistema e eventualmente causar alguns bugs malucos.