Dans le cas courant, vous avez un accès privé pour les champs, vous NE POUVEZ donc PAS utiliser getFields en réflexion. Au lieu de cela, vous devez utiliser getDeclaredFields
Donc, tout d'abord, vous devez savoir si votre annotation Column a la rétention d'exécution:
@Retention(RetentionPolicy.RUNTIME)
@interface Column {
}
Après cela, vous pouvez faire quelque chose comme ceci:
for (Field f: MyClass.class.getDeclaredFields()) {
Column column = f.getAnnotation(Column.class);
// ...
}
De toute évidence, vous aimeriez faire quelque chose avec le champ - définir une nouvelle valeur à l'aide de la valeur d'annotation:
Column annotation = f.getAnnotation(Column.class);
if (annotation != null) {
new PropertyDescriptor(f.getName(), Column.class).getWriteMethod().invoke(
object,
myCoolProcessing(
annotation.value()
)
);
}
Ainsi, le code complet peut ressembler à ceci:
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()
)
);
}