如何通过反射从方法中获取注释

时间:2014-11-04 00:28:50

标签: java reflection annotations

假设有一个类

public class A {

    @Deprecated
    public void f() {}
}

我希望通过反射获得方法f()的所有注释。

我尝试了什么:

public static void main(String[] args) {
        Class c = A.class;
        Method[] methods = c.getDeclaredMethods();

        String s = methods[0].getDeclaredAnnotations()[0].toString();
        System.out.println(s);
}

问题是它打印了注释的全名 - @ java.lang.Deprecated()

有没有办法只获得注释的简短形式(@Deprecated或只是不推荐使用)?

1 个答案:

答案 0 :(得分:1)

只需使用Annotation获取getClass()实例的类型即可。这将返回一个代理类,因为它是在运行时生成的。此实例将实现注释类型。所以你可以使用getInterfaces()获得它。

s.getClass().getInterfaces()[0]

然后,您可以在返回的getSimpleName()实例上调用Class