Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Map da erro, não aceita HashMap

No caso desta questão abaixo, o eclipse pede para fazer cum cast no hashMap para Map, para que funcione a criação do mapa, porém, depois de fazer esse cast as funções put não dão certo.

Onde eu estou errando?

Faça testes com o Map, como visto nesse capítulo:

 public class TestaMapa {

        public static void main(String[] args) {
            Conta c1 = new ContaCorrente();
            c1.deposita(10000);

            Conta c2 = new ContaCorrente();
            c2.deposita(3000);

            // cria o mapa
            Map mapaDeContas = new HashMap();

            // adiciona duas chaves e seus valores
            mapaDeContas.put("diretor", c1);
            mapaDeContas.put("gerente", c2);

            // qual a conta do diretor?
            Conta contaDoDiretor = (Conta) mapaDeContas.get("diretor");
            System.out.println(contaDoDiretor.getSaldo());
        }
    }

Depois, altere o código para usar o generics e não haver a necessidade do casting, além da garantia de que nosso mapa estará seguro em relação a tipagem usada. Você pode utilizar o quickfix do Eclipse para que ele conserte isso para você: na linha em que você está chamando o put, use o ctrl + 1. Depois de mais um quickfix (descubra!) seu código deve ficar como segue:

    // cria o mapa
    Map<String, Conta> mapaDeContas = new HashMap<String, Conta>();

Que opção do ctrl + 1 você escolheu para que ele adicionasse o generics para você?

5 respostas

Olá Elias,

em cima de qualquer linha que está dando o alerta basta apertar (ctrl + 1) e selecionar a opção

Infer Generic Type Arguments

Vale lembrar que esta opção abre uma caixa que basta você apertar Ok e o código é gerado para voce.

Espero que está tenha sido sua dúvida. Bom estudos. Abraços

Boa tarde, Elias! Como vai?

O cast não é necessário na criação do HashMap e sim, na seguinte linha:

Conta contaDoDiretor = (Conta) mapaDeContas.get("diretor");

Isso acontece, pq a gente não informou ao Java o que iremos guardar no mapa quando da criação dele! Ou seja, ele não sabe que dentro do mapa estão guardados objetos do tipo Conta e, por isso, precisamos usar o cast como visto no trecho de código anterior.

Para resolver esse problema, basta darmos essa ajuda ao Java indicando a ele o que iremos guardar no mapa utilizando generics:

Map<String, Usuario> mapaDeContas = new HashMap<String, Usuario>();

Ou ainda, a partir da versão 7 do Java:

Map<String, Usuario> mapaDeContas = new HashMap<>();

Além disso, o exercício te dá a dica que é possível usar o atalho CTRL+1 para fazer com que o Eclipse infira os tipos e já faça sozinho essa alteração na declaração do mapa. No entanto, é importante posicionar o cursos do Eclipse sobre o ponto exato onde vc quer utilizar o atalho, que nesse caso é a linha da criação do mapa.

Com essa alteração na criação do mapa, o cast não se fará mais necessário como era no primeiro trecho de código que eu citei.

Qualquer coisa se ainda tiver alguma dúvida é só falar!

Grande abraço e bons estudos!

solução!

Oi Elias, tudo bem?

Em que linha você deu o Ctrl + 1?

testei aqui na linha do put() e a opção aparece aparece:

Caso não apareça pra você, posta sua classe completa aqui, incluindo os imports.

[]'s

Muito obrigado Gabriel.

Muito obrigado Lucas, foi exatamente essa última linha da sua resposta que resolveu meu problema.

Eu havia importado o Map errado

import com.sun.javafx.collections.MappingChange.Map;

Isso já aconteceu também com outros códigos aqui, é uma boa lembrança para o pessoal que está começando como eu, tomar cuidado com imports errados.

Valeu d+

Por nada, Elias!

Sempre que tiver alguma dúvida é só procurar o pessoal aqui no fórum!

Grande abraço e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software