Java如何获取所有注解?
要获取类,方法,构造函数或字段的所有注释,我们使用getAnnotations()方法。此方法返回一个数组Annotation
在以下示例中,我们尝试从该sayHi()方法读取所有注释。首先,我们需要获取自身的方法对象。因为sayHi()方法具有参数,所以我们不仅需要将方法名称传递给getMethod()方法,而且还需要传递参数的类型。
该getAnnotations()方法仅返回具有的注释RetentionPolicy.RUNTIME。因为其他保留策略不允许注释在运行时可用。
package org.nhooo.example.lang.annotation;import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class GetAllAnnotation {
private Map<String, String> data = new HashMap<>();
@SuppressWarnings("unchecked")
public static void main(String args[]) {
GetAllAnnotation demo = new GetAllAnnotation();
demo.sayHi("001", "Alice");
demo.sayHi("004", "Malory");
try {
Class clazz = demo.getClass();
// 要获得sayHi()方法,我们不仅需要传递方法
// 名称及其参数类型,因此使用getMethod()方法
// 返回正确的方法供我们使用。
Method method = clazz.getMethod("sayHi", String.class, String.class);
//从sayHi()方法获取所有注释。但这实际上
//将仅返回一个注释。因为只有HelloAnnotation
// 具有RUNTIME保留策略的注释,这意味着
// 与sayHi()方法关联的其他注释不是
// 在运行时可用。
Annotation[] annotations = method.getAnnotations();
for (Annotation anno : annotations) {
System.out.println("Type: " + anno.annotationType());
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
@MyAnnotation("Hi")
@HelloAnnotation(value = "Hello", greetTo = "Everyone")
public void sayHi(String dataId, String name) {
Map data = getData();
if (data.containsKey(dataId)) {
System.out.println("Hello " + data.get(dataId));
} else {
data.put(dataId, name);
}
}
private Map<String, String> getData() {
data.put("001", "Alice");
data.put("002", "Bob");
data.put("003", "Carol");
return data;
}
}
package org.nhooo.example.lang.annotation;public @interface MyAnnotation {
String value();
}
检查HelloAnnotation以下链接上的“如何创建简单注释”。
此代码段的结果:
Hello AliceType: interface org.nhooo.example.lang.annotation.HelloAnnotation
以上是 Java如何获取所有注解? 的全部内容, 来源链接: utcz.com/z/334621.html