Для доступу до приватних полів вам потрібно отримати їх із оголошених полів класу, а потім зробити доступними:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
EDIT : як це зауважив 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