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

O código da Opinião do Autor no Exercício 04 da Aula 02 - Obtendo Classes está errado?

O código da Opinião do Autor no exercício em questão não funciona:

  1. É lançado NullPointerException ao chamar o método get pois o atributo mapa não foi inicializado.
  2. Mesmo inicializando o atributo mapa o valor retornado é sempre null pois a key passada como parâmetro nunca tem seu value.

Para resolver usei o seguinte código:

public Class<?> getClass(String cls) throws Exception {
    if (cls != null) {
        System.out.println(Class.forName(cls));

        return Class.forName(cls);
    } else {
        throw new RuntimeException("Chave inválida");
    }
}

Estão as afirmações acima corretas?

3 respostas

Oi Carlos tudo bem?

Voce poderia me dizer qual exercício que você se refere? Pra mim poder te ajudar :)

É Exercício 04 da Aula 02:

"Crie uma classe chamada MapaDeClasses que possui como atributo um mapa do tipo Map. Crie um método de assinatura Class getClass(String), que recupera do mapa o valor cuja chave foi passada como parâmetro e retorna a classe cujo nome está nesse valor."

solução!

Oi Carlos, o código do autor é uma ajuda para você conseguir fazer. Para que funcione conforme o enunciado, você pode fazer o seguinte:

 public class MapaDeClasses {

    public Map<String, Class<?>> mapa = new HashMap<String, Class<?>>();

    public void load(String nomeClasse) throws Exception {
        mapa.put(nomeClasse, Class.forName(nomeClasse));
    }

    public Class<?> getClass(String cls) throws Exception {
        Class<?> clazz = mapa.get(cls);
        if (clazz != null) {
            return clazz;
        } else {
            throw new RuntimeException("Chave inválida");
        }
    }

Assim voce tem um mapa na Classe MapaDeClasses, e tem o método load, que quando você passar um nome de uma classe, ele armazena a classe correspondente. E você pode usa-la da seguinte maneira.

public static void main(String[] args) throws Exception {
        MapaDeClasses mapaDeClasses = new MapaDeClasses();
        mapaDeClasses.load("java.time.LocalDate");

        Class<?> classe = mapaDeClasses.getClass("java.time.LocalDate");

        System.out.println(classe);
    }

Espero te ajudado :)