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()