Para acceder a los campos privados, debe obtenerlos de los campos declarados de la clase y luego hacerlos accesibles:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
EDITAR : como ha comentado aperkins , tanto acceder al campo, configurarlo como accesible y recuperar el valor puede arrojar Exception
s, aunque las únicas excepciones marcadas de las que debe tener en cuenta se comentaron anteriormente.
Se NoSuchFieldException
generaría si solicitara un campo con un nombre que no correspondiera a un campo declarado.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
Se IllegalAccessException
generaría si el campo no fuera accesible (por ejemplo, si es privado y no se ha hecho accesible al perder la f.setAccessible(true)
línea).
Los RuntimeException
s que se pueden lanzar son SecurityException
s (si las JVM SecurityManager
no le permitirán cambiar la accesibilidad de un campo), o IllegalArgumentException
s, si intenta acceder al campo en un objeto que no es del tipo de clase del campo:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type