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