我有下一个界面:
public interface AG {
@Params(param = {"user","userN"})
public String addUse(){}
}
现在,我想在反思中得到注释,所以我写了下一篇:
Method[] methods = AG.class.getDeclaredMethods();
for (int i = 0; i<methods.length; i++){
String name = methods[i].getName();
if (name.equals("addUse")){
Method method = methods[i];
Annotation[] annotaions = method.getAnnotations();}}
我看到注释是一个空集(当方法为addUse
时)。可能是什么原因?
答案 0 :(得分:3)
您的代码仅适用于具有retention policy权限的注释,以便在运行时进行内省。特别是它应该是RUNTIME
,如下所示:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Params {
...
retention policy,顾名思义,确定保留有关注释的信息的时间,以及相应的字节码:
SOURCE
: not at all(不为注释生成字节码)。CLASS
: in the classfile(生成对注释类型的RuntimeInvisibleAnnotations
引用),RUNTIME
: available to the code running in the VM(生成对注释类型的RuntimeVisibleAnnotations
引用。)请注意,这意味着理论上,CLASS
- 保留注释可以由VM提供。但实际情况并非如此(当然不是在Oracle JVM上)。