为了账号安全,请及时绑定邮箱和手机立即绑定

我可以获得任何注释值,而不使用注释的名称吗?

我可以获得任何注释值,而不使用注释的名称吗?

蓝山帝景 2022-09-28 10:09:19
我想编写一个返回注释方法值的方法。我试图使用这个变体,没有任何成功参数: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

此外,在大多数情况下,您正在使用和错误。getMethodgetDeclaredMethod

下面是一个工作示例:

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")

将打印

测试页


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信