1

我有下一个界面:

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

4

1 回答 1

3

您的代码仅适用于具有正确保留策略以便在运行时进行自省的注释。特别是,它应该是RUNTIME这样的:

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

顾名思义,保留策略决定了注释信息被保留到什么时间,并带有相应的字节码

请注意,这意味着,理论上, VM可以CLASS使用-retention 注释。然而,在实践中,情况并非如此(当然不是在 Oracle JVM 上)。

于 2013-09-02T08:57:22.693 回答