views:

30

answers:

2

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"" !!!

+1  A: 
  • 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

Favonius
A: 

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

ewernli
Yes too me thinked so but in the decompiled class nothing is present!!! and therefore I'm confused... I'll try to inspect the class file with the javap tool
xdevel2000
javap returns nothing where are put then?
xdevel2000