什么是注释#annotationType()适合?

时间:2016-03-29 19:54:02

标签: java annotations

接口Annotation指定方法

Class<? extends Annotation> annotationType()

具有零信息 1 javadoc。我不知道它有什么好处。我所能找到的只是question,但实际上并不需要它(因为接受的一个下面的两个顶部答案显示)。

它允许我们使用

a.annotationType().equals(MyAnnotation.class)

a instanceof MyAnnotation

执行相同的工作......除非a是实现多个注释的类的实例 - 但有没有人见过这样的野兽?

如果aclass A implements MyAnnotation, YourAnnotation的实例,则上述两项测试不相同,但问题是哪一项更好......

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

2 个答案:

答案 0 :(得分:7)

它与getClass()类似,除了由于在运行时实现注释的方式,getClass()经常为注释实例返回一个无意义的类型。

annotationType()返回&#34;正确的事情&#34; - 注释的反射类型,而不是一些无意义的运行时类型。

比较Enum.getDeclaringClass(),它返回&#34;正确的东西&#34;对于枚举常量,而myEnumConstant.getClass()可能返回枚举的合成子类型。

答案 1 :(得分:1)

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

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