java如何检查AnnotationInvocationHandler与Annotation的关系
我有一个注释定义为
@Retention(RUNTIME)
@Target(FIELD)
@interface A {}
使用此注释的类
class C {
@A String f;
}
然而,在运行时,它被一个带有AnnotationInvocationHandler
的Proxy
包装,例如Field f = C.class.getField("f"); f.getDeclaredAnnotations()
返回这个Proxy
的数组。在这种情况下,如何检查类C
的字段f
是否用注释A
进行了注释
注意:f.isAnnotationPresent(A.class)
返回false
# 1 楼答案
这是因为注释} )
A
没有runtime retention,所以在运行时删除注释(默认的运行时保留期为^{尝试在以下位置修改注释:
然后
f.isAnnotationPresent(A.class)
将返回true
注意:在某些IDE中,如果注释没有运行时保留,则调用isAnnotationPresent时会出现警告。 例如,在Netbeans 8.1中,您可以看到一条消息
com.mypackage.A does not have runtime Retention, the result will always be false