Nel caso comune hai accesso privato ai campi, quindi NON PUOI usare getFields in reflection. Invece di questo dovresti usare getDeclaredFields
Quindi, in primo luogo, dovresti essere consapevole se l'annotazione della colonna ha la conservazione del runtime:
@Retention(RetentionPolicy.RUNTIME)
@interface Column {
}
Dopodiché puoi fare qualcosa del genere:
for (Field f: MyClass.class.getDeclaredFields()) {
Column column = f.getAnnotation(Column.class);
// ...
}
Ovviamente, vorresti fare qualcosa con il campo: imposta un nuovo valore usando il valore di annotazione:
Column annotation = f.getAnnotation(Column.class);
if (annotation != null) {
new PropertyDescriptor(f.getName(), Column.class).getWriteMethod().invoke(
object,
myCoolProcessing(
annotation.value()
)
);
}
Quindi, il codice completo può essere simile a questo:
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()
)
);
}