在我的代码中,我可能在方法或字段上定义了注释,所以我正在做的是检查类中的方法和字段,并将所有注释存储在单独的列表中。
然后我有一个名为getAnnotation的方法。
Annotation getAnnotation(Class annotationClass) {
for (Annotation annotation : annotations) {
if (annotation.getClass().equals(annotationClass)) {
return annotation;
}
}
return null;
}
我称之为:
Annotation annotation = getAnnotation(MyAnnotation.class);
问题是getAnnotation方法与类名不匹配。当我调试时,我看到注释显示为代理对象。在这种情况下,如何找到我想要的特定注释?
TIA
我像这样定义地图:
Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>(4);
我填充了这样的地图:
Annotation[] annotations = method.getAnnotations();
for (Annotation annotation : annotations) {
annotations.put(annotation.getClass(), annotation);
}
答案 0 :(得分:1)
你最好填充Map<Class<? extends Annotation>, Annotation>
- 这样查找将是O(1),你不会关心它是否是代理。
答案 1 :(得分:1)
耶!我想到了。 Annotation对象有一个“annotationType()”方法来返回真实的类名。
所以感兴趣的人的代码看起来像这样:
地图,注释&gt; annotations = new HashMap,Annotation&gt;(4);
Annotation[] annos = method.getAnnotations();
for (Annotation anno : annos) {
annotations.put(anno.annotationType(), annotation);
}
然后类匹配工作正常。