2012-09-28 32 views
16

Me gustaría utilizar anotaciones en mi aplicación. Por esta razón creo "hola mundo" para las anotaciones:getAnnotations() está vacío

siguiente ejemplo:

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); 
    } 
} 

y esta es la Anotación:

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

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

Mi problema es ahora que getAnnotations(), en el principal es vacío. ¿Qué pasa con mi código?

+3

Bueno, un problema es que utilice una anotación llamado '@ foo', pero definir una anotación llamada' @ Test_Target'. Por lo general, es mejor publicar código que compila (aunque * David Grant * le dio la respuesta de todos modos). – parsifal

+0

Sí, claro, gracias, lo edito ya. Eso fue un error de copiar y pegar :) –

Respuesta

33

Añadir lo siguiente a su anotación:

@Retention(RetentionPolicy.RUNTIME) 

Desde el Javadoc para @Retention:

los valores predeterminados de directiva de retención a RetentionPolicy.CLASS

Desde el Javadoc para RetentionPolicy:

  • CLASS
    • Las anotaciones se van a grabar en el archivo de clase por el compilador, pero no necesita ser retenido por la máquina virtual en tiempo de ejecución.
  • RUNTIME
    • Las anotaciones se van a grabar en el archivo de clase por el compilador y retenido por la máquina virtual en tiempo de ejecución, por lo que pueda ser leído reflexivamente.
  • SOURCE
    • anotaciones son para ser desechados por el compilador.