En el caso común, tiene acceso privado a los campos, por lo que NO PUEDE usar getFields como reflejo. En lugar de esto, debe usar getDeclaredFields
Entonces, en primer lugar, debe tener en cuenta si su anotación de columna tiene la retención de tiempo de ejecución:
@Retention(RetentionPolicy.RUNTIME)
@interface Column {
}
Después de eso, puedes hacer algo como esto:
for (Field f: MyClass.class.getDeclaredFields()) {
Column column = f.getAnnotation(Column.class);
// ...
}
Obviamente, le gustaría hacer algo con el campo: establezca un nuevo valor usando el valor de anotación:
Column annotation = f.getAnnotation(Column.class);
if (annotation != null) {
new PropertyDescriptor(f.getName(), Column.class).getWriteMethod().invoke(
object,
myCoolProcessing(
annotation.value()
)
);
}
Entonces, el código completo se puede ver así:
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()
)
);
}