У меня есть какая-то хитрая проблема типового типа, связанная с отражением.Вот код.
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)
Если я удаляю подстановочные знаки, то он компилируется и работает нормально,Каков был бы правильный способ объявить параметр типа для переменной validatorClass
?
Спасибо.