2012-09-28 13 views
16

Ich möchte Anmerkungen in meiner Anwendung verwenden. Aus diesem Grunde erstelle ich "Hallo Welt" für Anmerkungen:getAnnotations() ist leer

folgt Beispiel:

public class HelloAnnotation 
{ 
    @Foo(bar = "Hello World !") 
    public String str; 

    public static void main(final String[] args) throws Exception 
    { 
     System.out.println(HelloAnnotation.class.getField("str").getAnnotations().length); 
    } 
} 

Und dies ist die Annotation:

import java.lang.annotation.ElementType; 
import java.lang.annotation.Target; 

@Target(ElementType.FIELD) 
public @interface Foo 
{ 
    public String doTestTarget(); 
} 

Mein Problem ist jetzt, dass Getannotations() in main ist leer. Was ist falsch an meinem Code?

+3

Nun, ein Problem ist, dass Sie eine Anmerkung '@ Foo' Namen verwenden, aber Sie definieren eine Anmerkung namens' @ Test_Target'. Es ist normalerweise am besten, wenn Sie Code schreiben, der kompiliert (obwohl * David Grant * Ihnen sowieso die Antwort gegeben hat). – parsifal

+0

Ja sicher, thx, ich bearbeite es schon. Das war Kopieren und Einfügen Fehler :) –

Antwort

33

Folgendes Ihre Anmerkung hinzufügen:

@Retention(RetentionPolicy.RUNTIME) 

Vom javadoc für @Retention:

die Aufbewahrungsrichtlinien standardmäßig RetentionPolicy.CLASS

Vom javadoc für RetentionPolicy:

  • CLASS
    • Anmerkungen sind vom Compiler in der Klassendatei aufgezeichnet werden, aber muss nicht von der VM zur Laufzeit beibehalten werden.
  • RUNTIME
    • Anmerkungen sind vom Compiler in der Klassendatei aufgezeichnet werden und durch die VM zur Laufzeit beibehalten, so sie lesen reflexiv werden.
  • SOURCE
    • Anmerkungen sind vom Compiler verworfen werden.