У звичайному випадку у вас є приватний доступ до полів, тому ви не можете використовувати getFields у відображенні. Замість цього слід використовувати getDeclaredFields
Отже, по-перше, ви повинні знати, чи має анотація стовпця збереження часу виконання:
@Retention(RetentionPolicy.RUNTIME)
@interface Column {
}
Після цього ви можете зробити щось подібне:
for (Field f: MyClass.class.getDeclaredFields()) {
Column column = f.getAnnotation(Column.class);
// ...
}
Очевидно, ви хочете зробити щось із полем - встановіть нове значення, використовуючи значення анотації:
Column annotation = f.getAnnotation(Column.class);
if (annotation != null) {
new PropertyDescriptor(f.getName(), Column.class).getWriteMethod().invoke(
object,
myCoolProcessing(
annotation.value()
)
);
}
Отже, повний код може виглядати так:
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()
)
);
}