Чтобы получить доступ к закрытым полям, вам нужно получить их из объявленных полей класса, а затем сделать их доступными:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
РЕДАКТИРОВАТЬ : как было прокомментировано aperkins , доступ к полю, установка его как доступного и получение значения могут вызвать Exceptions, хотя единственные отмеченные исключения, о которых вам следует помнить, прокомментированы выше.
NoSuchFieldExceptionБудет выброшено , если вы попросили поле имени , которое не соответствует заявленной области.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
IllegalAccessExceptionБудет выброшено , если поле не было доступно (например, если он является частным и не доступен через пропускает в f.setAccessible(true)линию.
В RuntimeExceptions , которые могут быть выброшены либо является SecurityExceptions (если JVM - й SecurityManagerне позволит вам изменить доступность полевой в), или IllegalArgumentExceptions, если вы попробуете и доступ к полю на объекте не типа класса месторождения в:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type