Java 注释#annotationType()的用途是什么?

Java 注释#annotationType()的用途是什么?,java,annotations,Java,Annotations,接口注释指定了一个方法 Class<? extends Annotation> annotationType() 但是 做同样的工作。。。除非a是实现多个注释的类的实例,但是有人见过这样的野兽吗 如果a是类a实现MyAnnotation、YourAnnotation的一个实例,那么上述两个测试并不等同,但问题是哪一个更好 (*)这就像说明getX()返回x这就像getClass(),除了在运行时实现注释的方式外,getClass()经常为注释实例返回无意义类型 annotation

接口注释指定了一个方法

Class<? extends Annotation> annotationType()
但是

做同样的工作。。。除非
a
是实现多个注释的类的实例,但是有人见过这样的野兽吗

如果
a
类a实现MyAnnotation、YourAnnotation
的一个实例,那么上述两个测试并不等同,但问题是哪一个更好

(*)这就像说明
getX()
返回
x

这就像
getClass()
,除了在运行时实现注释的方式外,
getClass()
经常为注释实例返回无意义类型

annotationType()
返回“正确的东西”——注释的反射类型,而不是一些无意义的运行时类型


比较
Enum.getDeclaringClass()
,它为枚举常量返回“正确的东西”,而
myEnumConstant.getClass()
可能返回枚举的合成子类型。

使用annotationType()的一个原因是,如果您的注释是使用代理类实现的。getClass()将返回代理类,而您可能需要底层的“真实”实现类


有很多这样的例子,特别是当涉及依赖注入或其他重量级反射时。

现在我明白了。。。与
Enum
的比较有帮助。如果我想要一个
MapYup。例如,我经常将
ClassToInstanceMap
传递给大家。现在有一些人要求改进文档
a.annotationType().equals(MyAnnotation.class)
a instanceof MyAnnotation