猿问

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

我想编写一个返回注释方法值的方法。

我试图使用这个变体,没有任何成功

参数:

  • 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();

    }

}

这有可能吗?


蓝山帝景
浏览 93回答 1
1回答

偶然的你

您的代码一直在寻找默认值,但您的问题从未提及默认值是否存在。若要获取提供的值,必须在实例上使用该方法。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")将打印测试页
随时随地看视频慕课网APP

相关分类

Java
我要回答