为什么“Class”和“Class>”的实例具有不同的行为,而它不应该如此?
我发现:
当我使用 Class
声明变量时, getAnnotation
的作用为:
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
,但是当我' m 使用 Class
声明变量, getAnnotation
充当:
public Annotation getAnnotation(Annotation annotationClass)
,所以我无法编译使用传递的注释类特定方法的代码。
例如:我可以编译((Class)clazz).getAnnotation(Human.class).age()
,但无法编译((Class)clazz ).getAnnotation(Human.class).age()
,其中 clazz
是某个 Class
实例,Human
是注释接口,有年龄
方法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的问题很不清楚,但我怀疑你遇到了原始类型。
JLS — 4.8 原始类型:
JLS — 4.6 类型擦除:
所以实际上这个方法:
被删除为:
这就是为什么你可以调用
getAnnotation
,但返回类型不会是Human
,它只是注释
。Your question is very unclear, but I suspect you're running into a raw type.
JLS — 4.8 Raw Types:
JLS — 4.6 Type Erasure:
So it's actually that this method:
is erased to this:
That's why you can call
getAnnotation
, but the return type won't beHuman
, it'll just beAnnotation
.