2013-07-28 12 views
31

Stworzyłem własny typ adnotacji tak:Jak uzyskać adnotację zajęć w języku Java?

public @interface NewAnnotationType {} 

i dołączyła do grupy:

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

i starałem się uzyskać adnotację klasy za pośrednictwem refleksji tak:

Class newClass = NewClass.class; 

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

ale nic nie drukuje. Co ja robię źle?

+1

O ile wyraźnie nie zaznaczono więc adnotacja jest dostępna tylko w czasie kompilacji. –

Odpowiedz

38

polityka domyślna retencja jest RetentionPolicy.CLASS co oznacza, że ​​domyślnie informacje adnotacja nie jest zachowywana w czasie wykonywania:

adnotacje mają być zapisane w pliku klasy przez kompilator, ale nie muszą być zatrzymywane przez VM w czasie wykonywania. To jest domyślne zachowanie.

Zamiast używać RetentionPolicy.RUNTIME:

adnotacje mają być zapisane w pliku klasy przez kompilator i przechowywane przez VM w czasie wykonywania, a więc mogą być odczytywane w zadumie.

... co można określić za pomocą @Retention meta-annotation:

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

ok, czy jest jakikolwiek sposób zmienić to? –

+1

po odbudowaniu działa :) dzięki –

+1

[Działa dla mnie.] (Http://ideone.com/AMTHsM) –

Powiązane problemy