如何解决如何使用反射获取注释类名称,属性值
与预期的相反,注释的元素不是属性-它们实际上是返回提供的值或默认值的方法。
您必须遍历注释的方法并调用它们以获取值。使用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
参数以避免警告。
解决方法
我知道如果知道注释类,就可以轻松获取特定注释并访问其属性。例如:
field.getAnnotation(Class<T> annotationClass)
它将返回特定注释接口的引用,因此您可以轻松访问其值。
我的问题是,我是否对特定的注释类不了解。我只想使用反射在运行时获取所有注释类名称及其属性,以将类信息转储为例如JSON文件的目的。我该如何轻松地做到这一点。
Annotation[] field.getAnnotations();
此方法将仅返回注释接口的动态代理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。