zur Laufzeit überprüft werden minimal runnable Beispiel
Sprachniveau:
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;
}
Bytecode Ebene: mit javap
wir beobachten, dass die Retention.CLASS
kommentierte Klasse ein Attribut RuntimeInvisible Klasse bekommt:
#14 = Utf8 LRetentionClass;
[...]
RuntimeInvisibleAnnotations:
0: #14()
während Retention.RUNTIME
Anmerkung erhält eine RuntimeVisible Klasse Attribut:
#14 = Utf8 LRetentionRuntime;
[...]
RuntimeVisibleAnnotations:
0: #14()
und die Runtime.SOURCE
Annotated .class
wird keine Anmerkung erhalten.
Examples on GitHub für Sie mit zu spielen.
Die Dokumentation (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/RetentionPolicy.html) ist sehr klar. –
ja ich lese schon, aber ich verstehe in der Praxis nicht, wie es funktioniert. In der Tat, wenn ich 'diese Phrase' versuche: "" Anmerkungen werden in der Klassendatei vom Compiler aufgezeichnet, müssen aber nicht zur Laufzeit von der VM gespeichert werden."" " und öffnen Sie dann eine dekompilierte Klasse, wo ich eine Annotation mit Aufbewahrungsrichtlinie CLASS Ich finde nichts ... – xdevel2000
Dann scheint Ihr Decompiler keine Anmerkungen unterstützt. Jd-gui funktioniert gut. – musiKk