2010-09-26 11 views
15

ich eine benutzerdefinierte Annotation für mein Projekt, das mit Feldern nur verwendet werden, das heißtZugang kommentierte Felder

@MyAnnotation int myVariable

Ich habe eine andere Klasse, die von der Durchführung einiger Aktionen entsprechend die Variablen zuständig sein wird values.The Projekt hat eine unbestimmte Anzahl von Klassen mit Anmerkungen enthalten. Wie kann ich mit meinem Annotationsprozessor darauf zugreifen, um auf die Werte zuzugreifen?

Ich kann die mit Anmerkungen versehenen Variablen überprüfen, die durch jede Klasse gehen, aber den Wert nicht ändern, da es kein Objekt ist.

irgendein Vorschlag, wie man es macht?

Vielen Dank im Voraus! :)

+0

Ich fand auch einen [link] (http://stackoverflow.com/questions/13875029/how-do-i-get-all-fields-and-properties-of-an-object- that-are-annotated-with-spec) ähnlich wie Ihre Frage – Fritz

+0

Meine zuvor angenommene Antwort aufgelistet immer noch verfügbar (zum Zeitpunkt des Schreibens dieses Kommentars) Artikel mit dem Titel "[Wie funktioniert Annotationen] (http://www.objectpartners.com/2010/08/06/How-Do-Annotations-Arbeit /) ". –

Antwort

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

Gut zum Suchen von Feldern, aber manchmal ist die Annotation auf der Accessor-Methode. – cosbor11

+0

Was ist mit privaten Bereichen? Ich glaube, das funktioniert nicht ... –

+0

Remi D: Private Felder sind kein Problem, Sie müssen nur aufrufen field.setAccessible (true); –

Verwandte Themen