我想編寫一個(gè)返回注釋方法值的方法。我試圖使用這個(gè)變體,沒有任何成功參數(shù):clazz - 具有注釋的 Сlass注釋克拉茲 - 我的注釋.class參數(shù)名稱 - 方法的名稱這是我的代碼: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 回答

偶然的你
TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
您的代碼一直在尋找默認(rèn)值,但您的問題從未提及默認(rèn)值是否存在。若要獲取提供的值,必須在實(shí)例上使用該方法。invoke
此外,在大多數(shù)情況下,您正在使用和錯(cuò)誤。getMethod
getDeclaredMethod
下面是一個(gè)工作示例:
public static Object getAnnotationValue(Class clazz, Class annotationClazz, String parameterName) { Annotation an = clazz.getAnnotation(annotationClazz); System.out.println(an.annotationType().getMethod(parameterName).invoke(an)); }
因此,對(duì)于這樣的類:
@PageName("testPage") //Same as @PageName(value = "testPage")public class Example {}
叫
getAnnotationValue(Example.class, PageName.class, "value")
將打印
測(cè)試頁
添加回答
舉報(bào)
0/150
提交
取消