我发现:
当我使用Class<?>
声明变量时,getAnnotation
充当:
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
,但当我使用Class
声明变量时,getAnnotation
充当:
public Annotation getAnnotation(Annotation annotationClass)
,所以我无法编译代码,它使用传递的注释类特定方法。
例如:我可以编译((Class<?>)clazz).getAnnotation(Human.class).age()
,但无法编译((Class)clazz).getAnnotation(Human.class).age()
,其中clazz
是Class
个实例,而Human
是注释界面,具有age
方法。
答案 0 :(得分:2)
您的问题很不清楚,但我怀疑您正在遇到原始类型。
原始类型定义为:
- 使用的泛型类型声明的名称,没有任何附带的实际类型参数。
- 原始类型R的任何非静态类型成员,不从R的超类或超接口继承。
类型擦除是从类型(可能包括参数化类型和类型变量)到类型(从不参数化类型或类型变量)的映射。
所以实际上这个方法:
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
被删除了:
public Annotation getAnnotation(Class annotationClass)
这就是为什么你可以拨打getAnnotation
,但返回类型不是Human
,它只是Annotation
。