Exemple minimal exécutable
Niveau de langue :
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.SOURCE)
@interface RetentionSource {}
@Retention(RetentionPolicy.CLASS)
@interface RetentionClass {}
@Retention(RetentionPolicy.RUNTIME)
@interface RetentionRuntime {}
public static void main(String[] args) {
@RetentionSource
class B {}
assert B.class.getAnnotations().length == 0;
@RetentionClass
class C {}
assert C.class.getAnnotations().length == 0;
@RetentionRuntime
class D {}
assert D.class.getAnnotations().length == 1;
}
Niveau du bytecode : utiliser javap
nous observons que le Retention.CLASS
obtient une classe annotée RuntimeInvisible attribut de classe :
#14 = Utf8 LRetentionClass;
[...]
RuntimeInvisibleAnnotations:
0: #14()
alors que Retention.RUNTIME
obtient une annotation RuntimeVisible (temps d'exécution visible) attribut de classe :
#14 = Utf8 LRetentionRuntime;
[...]
RuntimeVisibleAnnotations:
0: #14()
y el Runtime.SOURCE
annoté .class
ne reçoit aucune annotation.
Exemples sur GitHub pour que vous puissiez jouer avec.