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