Class> clazz = objectInstance.getClass(); 
Field field = clazz.getDeclaredField("name"); 
field.setAccessible(true); 
String value = (String) field.get(objectInstance);
System.out.println(value); // prints “John Doe”

Observe que estamos novamente trabalhando diretamente com os metadados do objeto, como sua classe e o campo nele. Podemos manipular a acessibilidade do campo com setAccessible (isso é considerado arriscado porque pode alterar as restrições que foram colocadas no código alvo como escrito). Essa é a parte essencial para tornar esse campo privado visível para nós.

Agora vamos fazer a mesma coisa usando identificadores de variáveis:


Class&gtl clazz = objectInstance.getClass();
VarHandle handle = MethodHandles.privateLookupIn(clazz,   
  MethodHandles.lookup()).findVarHandle(clazz, "name", String.class);
String value = (String) handle.get(objectInstance);
System.out.println(value4); // prints "John Doe"

Aqui, usamos privateLookupIn porque o campo é marcado como privado. Há também um genérico lookup()que respeitará os modificadores de acesso, por isso é mais seguro, mas não encontrará o campo privado.