刚才在写一个方法的时候试图在enum上使用annotation:

public enum DataKey {
    @Incremental
    @FromProbe
    @Transient(replacePolicy = ReplacePlolicy.REPLACE_IF_LATER_THAN)
    VISIT_COUNT
}

然后在merge的时候使用annotation:

if (key.getClass().isAnnotationPresent(Transient.class)) {
    ...
}

结果不进if,debug时发现key(DataKey的对象)的类型是DataKey(其实也挺顺理成章的),于是使用如下代码:

if (DataKey.class.getField(key.name()).isAnnotationPresent(Transient.class)) {
    ...
}

结果正确。 结论:在对enum类型使用FIELD一级annotation时需要使用第二种方法进行反射