Estava eu, em um belo dia, implementando um belo framework
quando me deparei com um não tão belo problema.
Usando reflection, precisava setar um valor para um campo/atributo privado de um objeto (assim como o hibernate também faz), mas ao tentar fazer isso, estourava a exception (java.lang.IllegalAccessException).
Após bater a cabeça um pouco (ok, mais que um pouco) encontrei o dito método setAccessible da classe Field, o qual resolveu o problema ![]()
Segue um exemplo:
Class<?> c = Pessoa.class;
Object obj = c.getConstructor(new Class[]{}).newInstance();
Field field = c.getDeclaredField("nome");
field.setAccessible(true);
field.set(obj, "fulano");
System.out.println( ((Pessoa)obj).getNome() );
Outro detalhe importante, se usar c.getField(“nome”) para um atributo privado, gera a exception java.lang.NoSuchFieldException. Deve-se usar getDeclaredField.