java - 为什么 getAnnotation 不接受 Class<?扩展注解>

标签 java generics annotations javac

为什么下一行在 Java 中产生编译错误?或者如何编写正确的泛型语法?

Class<? extends Annotation> annotation = annotations[i];
Class<? extends Annotation> anno = javaClass.getAnnotation(annotation);

方法的签名是:

public <A extends Annotation> A getAnnotation(Class<A> annotationClass)

Eclipse 编译错误:

Type mismatch: cannot convert from capture#5-of ? extends Annotation to Class<? extends Annotation>

javac编译错误:

incompatible types
    Class<? extends Annotation> anno = javaClass.getAnnotation(annotation);
                                                              ^
 required: Class<? extends Annotation>
 found:    CAP#1
 where CAP#1 is a fresh type-variable:
   CAP#1 extends Annotation from capture of ? extends Annotation

最佳答案

getAnnotation 返回注释本身 - 而不是注释的。我怀疑你可以使用:

Class<? extends Annotation> annotationClass = annotations[i];
Annotation annotation = javaClass.getAnnotation(annotationClass);

关于java - 为什么 getAnnotation 不接受 Class<?扩展注解>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10663955/

相关文章:

java - 如何使用 hibernate/jpa 注释将一个类映射到不同的表

Java 泛型 : parse String[] to (T extends Number)[]

annotations - JFreechart在图表上绘制圆弧

java - ldap中的别名是什么

java - 相机 2 基本 : Application:transformClassesWithDexForDebug

java - 作为 JLabel 名称的字符串

java - 如何修复 NoSuchMethodError?

c# - 泛型类型转换

generics - 在 flutter 中通过 Function(T) 传递泛型类型

java - 这个嵌套注解做什么/允许做什么?