Для доступу до приватних полів вам потрібно отримати їх із оголошених полів класу, а потім зробити доступними:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
EDIT : як це зауважив aperkins , і доступ до поля, і встановлення його як доступного, і отримання значень можуть кидати Exceptions, хоча вище лише прокоментуються єдині перевірені винятки, про які потрібно пам’ятати.
NoSuchFieldExceptionБуде викинуте , якщо ви попросили поле імені , яке не відповідає заявленій галузі.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
IllegalAccessExceptionБуде викинуте , якщо поле не було доступно (наприклад, якщо він є приватним і не доступний через пропускає в f.setAccessible(true)лінію.
В RuntimeExceptions , які можуть бути викинуті або є SecurityExceptions (якщо JVM - й SecurityManagerне дозволить вам змінити доступність польовий в), або IllegalArgumentExceptions, якщо ви спробуєте і доступ до поля на об'єкті не типу класу родовища в:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type