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不会识别它们。
有关更多信息,请参阅此处 。