Setando valor em atributo privado de um objeto

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 :D
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.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.