在列表中查找注释

发布于 2024-12-03 17:31:24 字数 918 浏览 2 评论 0 原文

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

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

In my code, I may have annotation defined on methods or fields so what I'm doing is checking both the methods and fields in the class and I store all annotations in a separate list.

Then later I have a method called getAnnotation.

Annotation getAnnotation(Class annotationClass) {
    for (Annotation annotation : annotations) {
        if (annotation.getClass().equals(annotationClass)) {
            return annotation;
        }
    }
    return null;
}

And I call it like this:

Annotation annotation = getAnnotation(MyAnnotation.class);

The problem is that the getAnnotation method does not match up the class names. When I debug I see that the annotations are showing as proxy objects. How can I find the specific annotation that I want in this case?

TIA

I define the map like this:

Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>(4);

I populated the Map like this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦一生花开无言 2024-12-10 17:31:24

您最好填充一个 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.

小伙你站住 2024-12-10 17:31:24

耶!我想通了。 Annotation 对象有一个“annotationType()”方法来返回真实的类名。

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

Map, Annotation>注释=新的HashMap,注释>(4);

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

然后类匹配就可以正常工作了。

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);

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

Then the class matching works fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文