【问题标题】:Why getAnnotation does not accept Class<? extends Annotation>为什么 getAnnotation 不接受 Class<?扩展注释>
【发布时间】:2012-05-19 09:24:31
【问题描述】:

为什么后续行会在 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

【问题讨论】:

    标签: java generics annotations javac


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2012-12-28
      • 1970-01-01
      • 2011-04-29
      • 2010-12-10
      相关资源
      最近更新 更多