Dalam kasus umum, Anda memiliki akses pribadi untuk bidang, jadi Anda TIDAK DAPAT menggunakan getFields dalam refleksi. Sebagai gantinya, Anda harus menggunakan getDeclaredFields
Jadi, pertama-tama, Anda harus waspada jika anotasi Kolom Anda memiliki retensi waktu proses:
@Retention(RetentionPolicy.RUNTIME)
@interface Column {
}
Setelah itu Anda bisa melakukan sesuatu seperti ini:
for (Field f: MyClass.class.getDeclaredFields()) {
Column column = f.getAnnotation(Column.class);
// ...
}
Jelas, Anda ingin melakukan sesuatu dengan bidang - setel nilai baru menggunakan nilai anotasi:
Column annotation = f.getAnnotation(Column.class);
if (annotation != null) {
new PropertyDescriptor(f.getName(), Column.class).getWriteMethod().invoke(
object,
myCoolProcessing(
annotation.value()
)
);
}
Jadi, kode lengkapnya bisa terlihat seperti ini:
for (Field f : MyClass.class.getDeclaredFields()) {
Column annotation = f.getAnnotation(Column.class);
if (annotation != null)
new PropertyDescriptor(f.getName(), Column.class).getWriteMethod().invoke(
object,
myCoolProcessing(
annotation.value()
)
);
}