与人们所期望的相反,注释的元素不是属性 - 它们实际上是返回提供的值或默认值的方法。
您必须循环访问批注的方法并调用它们以获取值。用于获取注释的类,返回的对象只是一个代理。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
参数以避免警告。