Can anyone explain me in a clear way what does meaning the java.lang.annotation.RetentionPolicy costants SOURCE, CLASS, RUNTIME?
and the term ""retaining annotation"" !!!
Can anyone explain me in a clear way what does meaning the java.lang.annotation.RetentionPolicy costants SOURCE, CLASS, RUNTIME?
and the term ""retaining annotation"" !!!
RetentionPolicy.SOURCE: Discard during the compile. These annotations don't make any sense after the compile has completed, so they aren't written to the bytecode.
Example:@Override,@SuppressWarnings
RetentionPolicy.CLASS: Discard during class load. Useful when doing bytecode-level post-processing. Somewhat surprisingly, this is the default.
RetentionPolicy.RUNTIME: Do not discard. The annotation should be available for reflection at runtime. Example:@Deprecated
Source:
http://www.oracle.com/technology/pub/articles/hunter_meta_2.html
According to your comments about class decompilation, here is how I think it should work:
RetentionPolicy.SOURCE: Won't appear in the decompiled class
RetentionPolicy.CLASS: Appear in the decompiled class, but can't be inspected at run-time with reflection with getAnnotations()
RetentionPolicy.RUNTIME: Appear in the decompiled class, and can be inspected at run-time with reflection with getAnnotations()