3

次の行で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
4

1 に答える 1

6

getAnnotation注釈のクラスではなく、注釈自体を返します。私はあなたがちょうど使用できると思います:

Class<? extends Annotation> annotationClass = annotations[i];
Annotation annotation = javaClass.getAnnotation(annotationClass);
于 2012-05-19T09:38:13.487 に答える