如何使用反射来确定批注的目标



假设我有一个带有@Target({ElementType.PARAMETER})的运行时注释@foo

还假设我用它来注释一个方法:

void someFunction(@foo Bar bar) {
  // ...
}

我有一个实例Annotation annotation,它对应于上面someFunction中的注释。

是否可以使用我的实例annotation(和反射)来确定参数bar的类型为Bar

否,给定注释的实例,您无法具体确定它在注释什么。

Annotation接口公开annotationType(),它将允许您访问注释类型(您的)。因此,您可以使用相应的Class来检索类型上Target注释的值。这是你能做的最好的。


请注意,Annotation只是一个接口。我可以像其他人一样创建它的实例。

new Annotation() {
    @Override
    public Class<? extends Annotation> annotationType() {
        return Target.class; // whatever
    }
};

相关内容

  • 没有找到相关文章

最新更新