Trong trường hợp phổ biến, bạn có quyền truy cập riêng tư cho các trường, vì vậy bạn KHÔNG THỂ sử dụng getFields trong phản chiếu. Thay vì điều này, bạn nên sử dụng getDeclaredFields
Vì vậy, trước tiên, bạn nên biết liệu chú thích Cột của bạn có lưu giữ thời gian chạy hay không:
@Retention(RetentionPolicy.RUNTIME)
@interface Column {
}
Sau đó, bạn có thể làm điều gì đó như sau:
for (Field f: MyClass.class.getDeclaredFields()) {
Column column = f.getAnnotation(Column.class);
// ...
}
Rõ ràng, bạn muốn làm điều gì đó với trường - đặt giá trị mới bằng cách sử dụng giá trị chú thích:
Column annotation = f.getAnnotation(Column.class);
if (annotation != null) {
new PropertyDescriptor(f.getName(), Column.class).getWriteMethod().invoke(
object,
myCoolProcessing(
annotation.value()
)
);
}
Vì vậy, mã đầy đủ có thể trông như thế này:
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()
)
);
}