Могу ли я получить любое значение аннотации без названия аннотации? - PullRequest
0 голосов
/ 08 апреля 2019

Я хотел бы написать метод, который возвращает значение метода аннотации.

Я пытался использовать эти варианты, ничего не получилось

Параметры:

  • clazz - класс с аннотациями
  • annotationClazz - My Annotation.class
  • parametersName - имя метода

Это мой код:

public static Object getAnnotationValue(Class clazz, Class annotationClazz, String parametersName) {

    Annotation an = clazz.getAnnotation(annotationClazz);
    if (an.equals(null)) {
        throw new CoreError("Класс " + clazz + " не содержит аннотацию " + annotationClazz);
    }
    PageName pn = (PageName) an;

    try {
        //its working!
        System.out.println(pn.value());

        //not working :(
        System.out.println(an.getClass().getMethod(parametersName).getDefaultValue()); //not working :(
        System.out.println(an.annotationType().getDeclaredMethod(parametersName, annotationClazz).getDefaultValue());
        System.out.println(pn.getClass().getMethod(parametersName).getDefaultValue());
        System.out.println(pn.annotationType().getDeclaredMethod(parametersName, annotationClazz).getDefaultValue());
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
}

Возможно ли это вообще?

1 Ответ

1 голос
/ 09 апреля 2019

Ваш код продолжает искать значение default , но ваш вопрос никогда не упоминает, существует ли значение по умолчанию. Чтобы получить указанное значение, необходимо invoke метод в экземпляре.

Кроме того, вы используете getMethod и getDeclaredMethod неправильно в большинстве случаев.

Вот рабочий пример:

public static Object getAnnotationValue(Class clazz, Class annotationClazz, String parameterName) {

    Annotation an = clazz.getAnnotation(annotationClazz);
    System.out.println(an.annotationType().getMethod(parameterName).invoke(an));
}

То есть для такого класса, как:

@PageName("testPage") //Same as @PageName(value = "testPage")
public class Example {}

вызывающий

getAnnotationValue(Example.class, PageName.class, "value")

напечатает

1022 * тестовая страница *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...