接口Annotation指定方法
Class<? extends Annotation> annotationType()
具有零信息 1 javadoc。我不知道它有什么好处。我所能找到的只是question,但实际上并不需要它(因为接受的一个下面的两个顶部答案显示)。
它允许我们使用
a.annotationType().equals(MyAnnotation.class)
但
a instanceof MyAnnotation
执行相同的工作......除非a
是实现多个注释的类的实例 - 但有没有人见过这样的野兽?
如果a
是class A implements MyAnnotation, YourAnnotation
的实例,则上述两项测试不相同,但问题是哪一项更好......
(*)这就像说getX()
返回x
。
答案 0 :(得分:7)
它与getClass()
类似,除了由于在运行时实现注释的方式,getClass()
经常为注释实例返回一个无意义的类型。
annotationType()
返回&#34;正确的事情&#34; - 注释的反射类型,而不是一些无意义的运行时类型。
比较Enum.getDeclaringClass()
,它返回&#34;正确的东西&#34;对于枚举常量,而myEnumConstant.getClass()
可能返回枚举的合成子类型。
答案 1 :(得分:1)
使用annotationType()的一个原因是您的注释是使用Proxy类实现的。 Object.getClass()将返回代理类,而您可能需要底层的“真实”实现类。
有各种各样的例子,特别是涉及依赖注入或其他重量级反射时。