Em caso comum, você tem acesso privado para os campos, então você NÃO PODE usar getFields na reflexão. Em vez disso, você deve usar getDeclaredFields
Portanto, em primeiro lugar, você deve estar ciente se sua anotação de coluna tem a retenção de tempo de execução:
@Retention(RetentionPolicy.RUNTIME)
@interface Column {
}
Depois disso, você pode fazer algo assim:
for (Field f: MyClass.class.getDeclaredFields()) {
Column column = f.getAnnotation(Column.class);
// ...
}
Obviamente, você gostaria de fazer algo com o campo - definir um novo valor usando o valor da anotação:
Column annotation = f.getAnnotation(Column.class);
if (annotation != null) {
new PropertyDescriptor(f.getName(), Column.class).getWriteMethod().invoke(
object,
myCoolProcessing(
annotation.value()
)
);
}
Portanto, o código completo pode ser semelhante a este:
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()
)
);
}