使用反射从界面获取注释

时间:2013-09-02 08:49:56

标签: java reflection annotations

我有下一个界面:

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时)。可能是什么原因?

1 个答案:

答案 0 :(得分:3)

您的代码仅适用于具有retention policy权限的注释,以便在运行时进行内省。特别是它应该是RUNTIME,如下所示:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Params {
...

retention policy,顾名思义,确定保留有关注释的信息的时间,以及相应的字节码:

请注意,这意味着理论上,CLASS - 保留注释可以由VM提供。但实际情况并非如此(当然不是在Oracle JVM上)。