Saya menemukan cara untuk mendapatkan anggota yang diwariskan melalui class.getDeclaredFields();
dan akses ke anggota pribadi melalui class.getFields()
Tapi saya sedang mencari bidang warisan pribadi. Bagaimana saya bisa mencapai ini?
109
Jawaban:
Ini harus menunjukkan bagaimana menyelesaikannya:
(Atau
Class.getDeclaredFields
untuk larik dari semua bidang.)Keluaran:
sumber
getSuperclass()
sampai Anda mencapainull
jika Anda ingin naik lebih tinggi.getDeclaredFields()[0]
ataugetDeclaredField("i")
tetapi mengulang[0]
akses array dalam dua pernyataan berikutnya?getDeclaredFields
. Jawaban telah diperbarui.Pendekatan terbaik di sini adalah menggunakan Pola Pengunjung untuk menemukan semua bidang di kelas dan semua kelas super dan menjalankan tindakan panggilan balik padanya.
Penerapan
Spring memiliki kelas Utility yang bagus
ReflectionUtils
yang melakukan hal itu: ia mendefinisikan metode untuk mengulang semua bidang dari semua kelas super dengan callback:ReflectionUtils.doWithFields()
Dokumentasi:
Kode sampel:
Keluaran:
sumber
Ini akan melakukannya:
Jika Anda menggunakan alat cakupan kode seperti EclEmma , Anda harus berhati-hati: mereka menambahkan bidang tersembunyi ke setiap kelas Anda. Untuk EclEmma, bidang ini ditandai sintetis , dan Anda dapat memfilternya seperti ini:
sumber
(berdasarkan jawaban ini )
sumber
Sebenarnya saya menggunakan hierachy tipe kompleks sehingga solusi Anda tidak lengkap. Saya perlu melakukan panggilan rekursif untuk mendapatkan semua bidang warisan pribadi. Inilah solusi saya
sumber
Saya perlu menambahkan dukungan untuk bidang warisan untuk cetak biru di Model Citizen . Saya mendapatkan metode ini yang sedikit lebih ringkas untuk mengambil bidang Kelas + bidang yang diwariskan.
sumber
sumber