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 Exception
s, meskipun hanya diperiksa pengecualian Anda perlu berhati-hati dari yang berkomentar atas.
Itu NoSuchFieldException
akan dibuang jika Anda meminta bidang dengan nama yang tidak sesuai dengan bidang yang dinyatakan.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
The IllegalAccessException
akan dilemparkan jika lapangan tidak dapat diakses (misalnya, jika itu pribadi dan belum dilakukan diakses melalui hilang keluar f.setAccessible(true)
jalur.
The RuntimeException
s yang dapat dibuang yang baik SecurityException
s (jika JVM SecurityManager
tidak akan memungkinkan Anda untuk mengubah aksesibilitas lapangan), atau IllegalArgumentException
s, 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