2010-09-26 16 views
15

Me hicieron un encargo de anotación para mi proyecto, que se utiliza sólo con los campos, es decircampos de acceso anotada

@MyAnnotation int myVariable

tengo otra clase que será el encargado de llevar a cabo algunas acciones de acuerdo a las variables valores. El proyecto tiene un número indeterminado de clases con anotaciones incluidas. ¿Cómo puedo acceder a ellos usando mi procesador de anotaciones para acceder a los valores?

Puedo verificar las variables anotadas pasando por cada clase, pero no modifico el valor ya que no es un objeto.

alguna sugerencia sobre cómo hacerlo?

Gracias de antemano! :)

+0

I también encontraron una [link] (http://stackoverflow.com/questions/13875029/how-do-i-get-all-fields-and-properties-of-an-object- that-are-annotated-with-spec) similar a su pregunta – Fritz

+0

Mi respuesta previamente aceptada enumeró todavía disponible (en el momento de escribir este comentario) el artículo titulado "[Cómo funcionan las anotaciones]] (http://www.objectpartners.com/2010/08/06/how-do-annotations-work /) ". –

Respuesta

19
int getMyVariable(Foo foo) throws IllegalArgumentException, IllegalAccessException{ 
for(Field f:foo.getClass().getDeclaredFields()){ 
    /** 
    * Ensure the RetentionPolicy of 'MyAnnotation' is RUNTIME. 
    */ 
    if(f.isAnnotationPresent(MyAnnotation.class)){ 
    return f.getInt(foo); 
    } 
} 
return -1; 
} 
+0

Bueno para encontrar campos, pero a veces la anotación está en el método de acceso. – cosbor11

+0

¿Qué pasa con los campos privados? Creo que esto no funciona ... –

+0

Remi D: Los campos privados no son un problema, solo necesita llamar a field.setAccessible (true); –

Cuestiones relacionadas