Untuk mengakses bidang pribadi, Anda harus mendapatkannya dari bidang yang dideklarasikan kelas dan kemudian membuatnya dapat diakses:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
EDIT : seperti yang telah berkomentar oleh aperkins , baik mengakses lapangan, pengaturan sebagai diakses dan mengambil nilai dapat membuang Exceptions, meskipun hanya diperiksa pengecualian Anda perlu berhati-hati dari yang berkomentar atas.
Itu NoSuchFieldExceptionakan dibuang jika Anda meminta bidang dengan nama yang tidak sesuai dengan bidang yang dinyatakan.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
The IllegalAccessExceptionakan dilemparkan jika lapangan tidak dapat diakses (misalnya, jika itu pribadi dan belum dilakukan diakses melalui hilang keluar f.setAccessible(true)jalur.
The RuntimeExceptions yang dapat dibuang yang baik SecurityExceptions (jika JVM SecurityManagertidak akan memungkinkan Anda untuk mengubah aksesibilitas lapangan), atau IllegalArgumentExceptions, jika Anda mencoba dan akses lapangan pada objek bukan dari jenis kelas ladang ini:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type