В чем разница между методами map и flatMap в Java 8?

В общем случае у вас есть частный доступ для полей, поэтому вы НЕ МОЖЕТЕ использовать 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()
                )
        );
}
578
задан Stuart Marks 18 March 2017 в 20:04
поделиться