在列表中查找注释
在我的代码中,我可能在方法或字段上定义了注释,所以我所做的是检查类中的方法和字段,并将所有注释存储在单独的列表中。
后来我有一个名为 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);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您最好填充一个
Map, Annotation>
- 这样查找的时间复杂度为 O(1),并且你不会关心它是否是代理。You'd better populate a
Map<Class<? extends Annotation>, Annotation>
- that way the lookup will be O(1), and you won't care if its a proxy or not.耶!我想通了。 Annotation 对象有一个“annotationType()”方法来返回真实的类名。
因此,任何感兴趣的人的代码将如下所示:
Map, Annotation>注释=新的HashMap,注释>(4);
然后类匹配就可以正常工作了。
Yay! I figured it out. The Annotation object has an "annotationType()" method to return the real class name.
So the code for anyone interested would look like this:
Map, Annotation> annotations = new HashMap, Annotation>(4);
Then the class matching works fine.