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

然后,稍后我有一个名为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>-这样,查找将为O(1),并且无论它是否为代理都无关紧要。

07-26 04:24