2010-09-26 12 views
15

ho fatto una consuetudine di annotazione per il mio progetto che sarà utilizzato solo con i campi, che èaccesso annotato campi

@MyAnnotation int myVariable

Ho un'altra classe che sarà incaricato di eseguire alcune azioni in base alle variabili valori. Il progetto ha un numero indeterminato di classi con annotazioni incluse. Come posso accedervi utilizzando il mio processore di annotazioni per accedere ai valori?

Posso controllare le variabili annotate andando in ogni classe, ma non modificando il valore poiché non è un oggetto.

qualche suggerimento su come farlo?

Grazie in anticipo !! :)

+0

Ho anche trovato un [link] (http://stackoverflow.com/questions/13875029/how-do-i-get-all-fields-and-properties-of-an-object- that-are-commentated-with-spec) simile alla tua domanda – Fritz

+0

La mia risposta precedentemente accettata elencava ancora disponibile (al momento della stesura di questo commento) l'articolo intitolato "[Come funzionano le annotazioni] (http://www.objectpartners.com)/2010/08/06/how-do-annotazioni-lavoro /)". –

risposta

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

Buono per la ricerca di campi, ma a volte l'annotazione è sul metodo accessor. – cosbor11

+0

E i campi privati? Credo che questo non funzioni ... –

+0

Remi D: I campi privati ​​non sono un problema, basta chiamare field.setAccessible (true); –

Problemi correlati