Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao executar o metodo get(obj)

Olá. Criei esse metodo que retorna uma String para imprimir na tela. Porém ao executar estou recebendo uma exception dizendo que não posso setar o valor String no atributo:

Exception in thread "main" java.lang.IllegalArgumentException: Can not set java.lang.String field com.br.alura.reflection.model.Conta.nome to java.lang.Class
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:18)
    at java.lang.reflect.Field.get(Field.java:358)
    at com.br.alura.reflection.utils.MapaDeClasses.getMapaValores(MapaDeClasses.java:62)
    public String getMapaValores(Object obj) throws Exception{
        StringBuilder mapaValores = new StringBuilder();

        Class<?> c = obj.getClass();

        mapaValores.append("Classe: "+c.getSimpleName()+ " \n");
        for(Field campo : c.getDeclaredFields()){            
            mapaValores.append("Att: " + campo.getName());
            campo.setAccessible(true);
            mapaValores.append("Valor: "+ campo.get(c));            
        }

        return mapaValores.toString();
    }

Todos os atributos da classe que estou enviando no obj são String, todos estão iniciados com valores default. A linha exata que está dando o erro é essa:

mapaValores.append("Valor: "+ campo.get(c));

Como posso resolver esse problema? Porque o problema está acontecendo?

1 resposta
solução!

A solução é passar o objeto em questão como parâmetro, e não a classe:

mapaValores.append("Valor: "+ campo.get(obj));