Aby uzyskać dostęp do pól prywatnych, musisz je pobrać z zadeklarowanych pól klasy, a następnie udostępnić je:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
EDYCJA : jak skomentowali aperkins , zarówno dostęp do pola, ustawienie go jako dostępnego, jak i odzyskanie wartości może wyrzucić Exception
s, chociaż jedyne zaznaczone wyjątki, o których należy pamiętać, zostały skomentowane powyżej.
Zostanie NoSuchFieldException
rzucony, jeśli poprosisz o pole o nazwie, która nie odpowiada zadeklarowanemu polu.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
Zostanie IllegalAccessException
wyrzucony, jeśli pole nie będzie dostępne (na przykład, jeśli jest prywatne i nie zostało udostępnione przez brak f.setAccessible(true)
linii).
Do RuntimeException
s, które mogą być rzucane są znakami SecurityException
s (jeśli JVM użytkownika SecurityManager
nie pozwalają na zmianę dostępności w polu), lub IllegalArgumentException
s, jeśli spróbujesz i dostęp boiska na obiekcie nie typu dziedzinie swojej klasie za:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type