Setando valor em atributo privado de um objeto

O uso de reflection é um recurso extremamente útil quando se desenvolve frameworks. Quando surge a necessidade de se alterar um valor de um atributo privado de um objeto (assim como o hibernate também faz para injetar valores do banco mapeados), mas ao tentar fazer isso, era lançado a exception (java.lang.IllegalAccessException).
Para resolver esse problema, deve-se fazer uso do método setAccessible da classe Field, o qual “permite” o acesso ao atributo por reflection.
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, será lançada a exception java.lang.NoSuchFieldException. Deve-se usar getDeclaredField.