Java 在列表中查找批注

Java 在列表中查找批注,java,reflection,annotations,Java,Reflection,Annotations,在我的代码中,我可能在方法或字段上定义了注释,所以我要做的是检查类中的方法和字段,并将所有注释存储在单独的列表中 后来我有了一个名为getAnnotation的方法 Annotation getAnnotation(Class annotationClass) { for (Annotation annotation : annotations) { if (annotation.getClass().equals(annotationClass)) {

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

后来我有了一个名为getAnnotation的方法

Annotation getAnnotation(Class annotationClass) {
    for (Annotation annotation : annotations) {
        if (annotation.getClass().equals(annotationClass)) {
            return annotation;
        }
    }
    return null;
}
我这样称呼它:

Annotation annotation = getAnnotation(MyAnnotation.class);
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);
}
问题是getAnnotation方法与类名不匹配。调试时,我看到注释显示为代理对象。在本例中,如何找到所需的特定注释

短暂性脑缺血发作

我对地图的定义如下:

Annotation annotation = getAnnotation(MyAnnotation.class);
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);
}

你最好填充一个
MapYay!我想出来了。Annotation对象有一个“annotationType()”方法来返回真实的类名

因此,任何感兴趣的人的代码如下所示:

Annotation annotation = getAnnotation(MyAnnotation.class);
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,Annotation>annotations=newhashmap,Annotation>(4)


然后类匹配就可以了。

好主意。现在我在键集和值上都看到了proxys:(好的,检查编辑。我想这是因为我从反射中获得这些注释,所以它们以某种方式被代理。好吧,我不认为你可以为
创建代理。这是
最终版
。你如何判断它是代理?当我调试类名时,类名是这样的:$Proxy3,而不是实际的类名。