在列表中查找注释

时间:2011-09-08 14:11:04

标签: java reflection annotations

在我的代码中,我可能在方法或字段上定义了注释,所以我正在做的是检查类中的方法和字段,并将所有注释存储在单独的列表中。

然后我有一个名为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);
}

2 个答案:

答案 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);
}

然后类匹配工作正常。