【问题标题】:How to pass an Annotation as a parameter?如何将注解作为参数传递?
【发布时间】:2024-01-23 19:19:01
【问题描述】:

CDI 类BeanManager 有几个方法,它们接受AnnotationAnnotation... 类型的参数。例如BeanManager.getBeans(...)

我想知道我应该如何将我的注释作为参数传递给这些方法。

我试过BeanManager.getBeans(MyBean.class, MyAnnotation.class),但它不起作用。我见过Class.isAnnotation(),但没有什么像Class.asAnnotation() 这样可以将它作为Annotation 类型检索。

BeanManager.getBeans(MyBean.class, @MyAnnotation) 都不起作用,BeanManager.getBeans(MyBean.class, (Annotation) MyAnnotation.class) 也不起作用。

如何将我的注释类检索为Annotation 类型?

【问题讨论】:

  • 不清楚您要做什么。 BeanManager.getBeans(...) 返回指定类型的 bean 实例。如果您尝试自己阅读注释,则需要使用 @Hirak 描述的反射。

标签: java parameters annotations cdi bean-manager


【解决方案1】:

文档中有一个例子:

beanManager.getBeans(Object.class, new AnnotationLiteral<Any>() {});

来源:16.6. The Bean interface

【讨论】:

  • 成功了。不过,这是一种奇怪的解决方案。我认为标准的 Java API 会提供一些更方便的东西。
【解决方案2】:

你需要使用

getAnnotation(Class annotationClass) 返回此元素的 如果存在这样的注释,则指定类型的注释, 否则为空。

或者循环遍历

getAnnotations() 返回此元素上存在的所有注释。

获取注释。

object.getClass().getAnnotations()

javadoc

【讨论】:

  • 我不确定我会如何称呼这些方法。在注释类本身上?
最近更新 更多