在列表中查找注释



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

然后我有一个方法叫做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);
}

您最好填充Map<Class<? extends Annotation>, Annotation> -这样查找将是0(1),并且您不会关心它是否是代理

好!我想明白了。Annotation对象有一个"annotationType()"方法来返回真实的类名。

所以对于感兴趣的人来说,代码是这样的:

Map, Annotation> annotations = new HashMap, Annotation>(4);

Annotation[] annos = method.getAnnotations();
for (Annotation anno : annos) {
    annotations.put(anno.annotationType(), annotation);
}

相关内容

  • 没有找到相关文章

最新更新