2013-07-28 5 views
31

Ich habe meine eigene Annotationstyp wie folgt erstellt:Wie Klasse Annotation in Java zu bekommen?

public @interface NewAnnotationType {} 

und es zu einer Klasse angehängt:

@NewAnnotationType 
public class NewClass { 
    public void DoSomething() {} 
} 

und ich versuchte, die Klasse Anmerkung über Reflexion wie folgt zu erhalten:

Class newClass = NewClass.class; 

for (Annotation annotation : newClass.getDeclaredAnnotations()) { 
    System.out.println(annotation.toString()); 
} 

aber es ist nichts zu drucken. Was mache ich falsch?

+1

Es sei denn, bei der Kompilierung explizit markiert, so ist eine Anmerkung zur Verfügung. –

Antwort

38

Die Standardaufbewahrungsrichtlinie ist RetentionPolicy.CLASS was bedeutet, dass in der Standardeinstellung Kommentarinformationen zur Laufzeit nicht zurückgehalten wird:

Anmerkungen werden vom Compiler in der Klassendatei aufgezeichnet werden, müssen aber nicht durch die beibehalten werden VM zur Laufzeit Dies ist das Standardverhalten.

Verwenden Sie stattdessen RetentionPolicy.RUNTIME:

Anmerkungen sind vom Compiler in der Klassendatei aufgezeichnet werden und durch die VM zur Laufzeit beibehalten, so können sie reflektiv gelesen werden.

... die Ihnen die @Retention meta-annotation angeben mit:

@Retention(RetentionPolicy.RUNTIME) 
public @interface NewAnnotationType { 
} 
+0

ok, ist es eine Möglichkeit, wie das zu ändern? –

+1

nach dem Umbau es funktioniert :) Dank –

+1

[Es funktioniert für mich.] (Http://ideone.com/AMTHsM) –

Verwandte Themen