3 de octubre de 2011

Java: Cómo leer un atributo privado usando introspección

Hoy, necesité leer el valor de un atributo de instancia privado en un sistema Java EE. Mediante introspección, es fácil. La parte interesante está en jugar con el Security Manager.

La clave la encontré en el artículo Subverting Java Access Protection for Unit Testing.

Field atributoPrivado = null;
for (Field field : objeto.getClass().getDeclaredFields()) {
   if ("atributoPrivado".equals(field.getName())) {
      atributoPrivado = field;
      break;
   }
}

atributoPrivado.setAccessible(true); // "ignorar" al Security Manager

System.out.println(atributoPrivado.get(sheet));