我想编写一个返回注释方法值的方法。我试图使用这个变体,没有任何成功参数:clazz - 具有注释的 Сlass注释克拉兹 - 我的注释.class参数名称 - 方法的名称这是我的代码: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贡献1841条经验 获得超3个赞
您的代码一直在寻找默认值,但您的问题从未提及默认值是否存在。若要获取提供的值,必须在实例上使用该方法。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")
将打印
测试页
添加回答
举报
0/150
提交
取消