Я хотел бы написать метод, который возвращает значение метода аннотации.
Я пытался использовать эти варианты, ничего не получилось
Параметры:
Это мой код:
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();
}
}
Это вообще возможно?
Ваш код продолжает искать значение По умолчанию, но в вашем вопросе никогда не упоминается, существует ли значение по умолчанию. Чтобы получить предоставленное значение, вы должны 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")
напечатал бы
testPage
Спасибо! Я не знал о "призыве". Это то, что мне нужно!