当前位置: 首页 > 面试题库 >

如何使用反射获取注释类名称,属性值

梁修贤
2023-03-14
问题内容

我知道如果知道注释类,就可以轻松获取特定注释并访问其属性。例如:

field.getAnnotation(Class<T> annotationClass)

它将返回特定注释接口的引用,因此您可以轻松访问其值。

我的问题是,我是否对特定的注释类不了解。我只想使用反射在运行时获取所有注释类名称及其属性,以将类信息转储为例如JSON文件的目的。我该如何轻松地做到这一点。

Annotation[] field.getAnnotations();

此方法将仅返回注释接口的动态代理。


问题答案:

与预期的相反,注释的元素不是属性-它们实际上是返回提供的值或默认值的方法。

您必须遍历注释的方法并调用它们以获取值。使用annotationType()获得注释的类,返回的对象getClass()只是一个代理。

这是一个示例,该示例打印@Resource类的注释的所有元素及其值:

@Resource(name = "foo", description = "bar")
public class Test {

    public static void main(String[] args) throws Exception {

        for (Annotation annotation : Test.class.getAnnotations()) {
            Class<? extends Annotation> type = annotation.annotationType();
            System.out.println("Values of " + type.getName());

            for (Method method : type.getDeclaredMethods()) {
                Object value = method.invoke(annotation, (Object[])null);
                System.out.println(" " + method.getName() + ": " + value);
            }
        }

    }
}

输出:

Values of javax.annotation.Resource
 name: foo
 type: class java.lang.Object
 lookup: 
 description: bar
 authenticationType: CONTAINER
 mappedName: 
 shareable: true

感谢Aaron指出,您需要转换null参数以避免警告。



 类似资料:
  • 我知道如果我们知道注释类,我们可以很容易地获得特定的注释并访问其属性。例如: 它将返回特定注释接口的引用,因此您可以轻松访问其值。 我的问题是,我是否对特定的注释类没有预先了解。我只想在运行时使用反射来获取所有注释类名及其属性,以便将类信息转储为例如JSON文件。我怎样才能以简单的方式做到这一点。 此方法将仅返回注释接口的动态代理。

  • 问题内容: 所以我正在写一个“ POJO to JSON”转换器。我希望能够传递一个对象并转换为JSON。 希望这会有意义 当我进入本节时,我是正确的。我可以调试它,并查看类的名称和值。 假设该类是这样的: 所以现在是一个站点。OK,然后我尝试获取字段名称(firstName,lastName),但是fields对象为空。 我究竟做错了什么? 谢谢 编辑 我知道了!这不是完成的代码,但它确实正在执

  • 问题内容: 我正在尝试使用Go的反射系统来检索函数的名称,但是在调用其类型的Name方法时会得到一个空字符串。这是预期的行为吗? 这是我如何解决问题的简单示例: 问题答案: 解决方案是使用FuncForPc返回一个。 返回: 如果需要,只需将其标记化即可。

  • 我使用的是selenium pagefactory,并引入了一个注释@Name(Description=“Username”),用于所有WebElement。稍后,我需要在自定义方法中找到描述值,以便进行报告,例如: 我的@Name注释界面和pagefactory如下所示: 名称接口 在使用反射时,我面临的问题是需要定义pagefactory的类名,并提供字段名作为字符串“username”,以检

  • 下面是我的示例类,我希望通过在这行中使用反射来获取y和z字段(Field[]fields=forName.getDeclaredFields();)我得到了空数组。如果y和z不是类结构的一部分,那么它们属于哪一部分

  • 使用Java反射,是否可以获取局部变量的名称?例如,如果我有: 有没有可能实现一种方法,可以找到这些变量的名称,比如: 编辑:这个问题与Java中有没有找到传递给函数的变量名称的方法不同?在这一点上,它更纯粹地询问一个人是否可以使用反射来确定局部变量的名称,而另一个问题(包括公认的答案)更侧重于测试变量的值。