我知道如果我们知道注释类,我们可以很容易地获得特定的注释并访问其属性。例如:
field.getAnnotation(Class<T> annotationClass)
它将返回特定注释接口的引用,因此您可以轻松访问其值。
我的问题是,我是否对特定的注释类没有预先了解。我只想在运行时使用反射来获取所有注释类名及其属性,以便将类信息转储为例如JSON文件。我怎样才能以简单的方式做到这一点。
Annotation[] field.getAnnotations();
此方法将仅返回注释接口的动态代理。
只是跟进上面的答案(我没有足够的代表回答):
method.invoke(annotation, null)
应更改为以下内容,否则抛出异常:
method.invoke(annotation, (Object[])null) or method.invoke(annotation, new Object[0])
与预期相反,注释的元素不是属性——它们实际上是返回提供的值或默认值的方法。
您必须遍历注释的方法,并调用它们来获取值。使用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对象为空。 我究竟做错了什么? 谢谢 编辑 我知道了!这不是完成的代码,但它确实正在执
下面是我的示例类,我希望通过在这行中使用反射来获取y和z字段(Field[]fields=forName.getDeclaredFields();)我得到了空数组。如果y和z不是类结构的一部分,那么它们属于哪一部分
我使用的库使用类型使用注释向变量添加约束。例如,如果您想要一个可配置的不透明度(以百分比为单位,由表示),您需要注释类型: 我不能让同一个库工作在相同的kotlin代码。 为了简化问题,让我们自己声明注释和用法: 运行会产生,表明类型上存在注释。 如果我们引入一个新的kotlin类,具有类似的字段和注释类型: 之前的检查,现在在类上: 产生,指示JavaAnnot注释不存在于类型的上,尽管我们显然
如果我有: 我可以通过使用getBean方法之一获得bean和资源。然而,我不知道如何获取属性值。 显然,我可以创建一个具有@Value属性的新bean,如: 我在Application Context对象上调用什么方法来获得该值而无需自动装配bean? 我通常使用@Value,但有一种情况是SPeL表达式需要是动态的,所以我不能只使用注释。
考虑下面的代码: 使用用于注释处理的最新JDK8 API,如何访问注释列表(@JSON,@freezed) 我尝试过很多技巧,比如