Genel bir durumda alanlar için özel erişiminiz vardır, bu nedenle yansımada getFields'ı KULLANAMAZSINIZ . Bunun yerine getDeclaredFields kullanmalısınız
Bu nedenle, ilk olarak, Sütun ek açıklamanızın çalışma zamanı saklama özelliğine sahip olup olmadığının farkında olmalısınız:
@Retention(RetentionPolicy.RUNTIME)
@interface Column {
}
Bundan sonra şöyle bir şey yapabilirsiniz:
for (Field f: MyClass.class.getDeclaredFields()) {
Column column = f.getAnnotation(Column.class);
// ...
}
Açıkçası, alanla bir şeyler yapmak istiyorsunuz - ek açıklama değerini kullanarak yeni bir değer belirleyin:
Column annotation = f.getAnnotation(Column.class);
if (annotation != null) {
new PropertyDescriptor(f.getName(), Column.class).getWriteMethod().invoke(
object,
myCoolProcessing(
annotation.value()
)
);
}
Yani tam kod şöyle görünebilir:
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()
)
);
}