Java:无法通过reflection访问注释

这是一个测试类:

import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class TestAnnotations { @interface Annotate{} @Annotate public void myMethod(){} public static void main(String[] args) { try{ Method[] methods = TestAnnotations.class.getDeclaredMethods(); Method m = methods[1]; assert m.getName().equals("myMethod"); System.out.println("method inspected ? " + m.getName()); Annotation a = m.getAnnotation(Annotate.class); System.out.println("annotation ? " + a); System.out.println("annotations length ? " + m.getDeclaredAnnotations().length); } catch(Exception e){ e.printStackTrace(); } } } 

这是我的输出:

 method inspected ? myMethod annotation : null annotations length : 0 

我错过了通过反思使注释可见?
我是否需要注释处理器才能检查它们的存在?

为了在运行时访问注释,它需要具有Runtime的保留策略。

 @Retention(RetentionPolicy.RUNTIME) @interface Annotate {} 

否则,将删除注释,并且JVM不会识别它们。
有关更多信息,请参阅此处 。