Here is a test class:
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(); } } }
Here is my output :
method inspected ? myMethod annotation : null annotations length : 0
What I am missing to make annotations visible through reflection ?
Do I need an annotation processor even for just checking their presence ?
In order to access an annotation at runtime, it needs to have a Retention policy of Runtime.
@Retention(RetentionPolicy.RUNTIME) @interface Annotate {}
Otherwise, the annotations are dropped and the JVM is not aware of them.
For more information, see here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With