Невозможно вызвать метод значения Аннотация - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть это:

public class Bootstrapper {
  public static List<Class<? extends Annotation>> annots = Arrays.asList(
    NotNull.class,
    ColumnType.class,
    RuntimeType.class,
    DefaultValue.class
  );
}

, а затем это вызывается статическим методом:

  for(Class<? extends Annotation> x: Bootstrapper.annots){
      if (field.isAnnotationPresent((Class)x)) {
        Object value=  field.getAnnotation(x).value();  // doesn't compile :(
      }
  }

, но затем я получаю эту ошибку компиляции:

[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins: maven-compiler-plugin: 3.5.1: compile (default-compile) для проекта vertx-start-project: ошибка компиляции [ERROR] / home / oleg/codes/oresoftware/vertx.api/src/main/java/huru/query/Bootstrapper.java:[55,50] не может найти символ [ОШИБКА] символ: значение метода () [ОШИБКА]
расположение: интерфейс Java.lang.annotation.Annotation

однако он будет компилироваться, если я жестко закодирую аннотацию:

Object value=  field.getAnnotation(ColumnType.class).value();  // compiles!

Я посмотрел на источник, метод field.getAnnotation () выглядит следующим образом:

  public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
    Objects.requireNonNull(annotationClass);
    return (Annotation)annotationClass.cast(this.declaredAnnotations().get(annotationClass));
  }
...