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?