リフレクションを含むトリッキーなジェネリック型の問題があります。これがコードです。
public @interface MyConstraint {
Class<? extends MyConstraintValidator<?>> validatedBy();
}
public interface MyConstraintValidator<T extends Annotation> {
void initialize(T annotation);
}
/**
@param annotation is annotated with MyConstraint.
*/
public void run(Annotation annotation) {
Class<? extends MyConstraintValidator<? extends Annotation>> validatorClass = annotation.annotationType().getAnnotation(MyConstraint.class).validatedBy();
validatorClass.newInstance().initialize(annotation) // will not compile!
}
上記のrun()
メソッドは、次のエラーのためにコンパイルされません。
The method initialize(capture#10-of ? extends Annotation) in the type MyConstraintValidator<capture#10-of ? extends Annotation> is not applicable for the arguments (Annotation)
ワイルドカードを削除すると、コンパイルされて正常に動作します。vairableのtypeパラメーターを宣言する適切な方法は何でしょうvalidatorClass
か?
ありがとう。