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ć Exceptions, chociaż jedyne zaznaczone wyjątki, o których należy pamiętać, zostały skomentowane powyżej.
Zostanie NoSuchFieldExceptionrzucony, jeśli poprosisz o pole o nazwie, która nie odpowiada zadeklarowanemu polu.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
Zostanie IllegalAccessExceptionwyrzucony, 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 RuntimeExceptions, które mogą być rzucane są znakami SecurityExceptions (jeśli JVM użytkownika SecurityManagernie pozwalają na zmianę dostępności w polu), lub IllegalArgumentExceptions, 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