2010-09-26 13 views
15

j'ai fait une coutume Annotation pour mon projet qui sera utilisé uniquement avec les champs, qui estchamps annotés d'accès

@MyAnnotation int myVariable

J'ai une autre classe qui sera chargé d'effectuer certaines actions en fonction des variables Le projet a un nombre indéterminé de classes avec des annotations incluses. Comment puis-je y accéder en utilisant mon processeur d'annotations pour accéder aux valeurs?

Je peux vérifier les variables annotées passant par chaque classe, mais ne modifiant pas la valeur puisque ce n'est pas un objet.

une suggestion sur la façon de le faire?

Merci d'avance !! :)

+0

Je trouve aussi un [lien] (http://stackoverflow.com/questions/13875029/how-do-i-get-all-fields-and-properties-of-an-object- that-are-annotated-with-spec) similaire à votre question – Fritz

+0

Ma réponse précédemment acceptée listait encore disponible (au moment de la rédaction de ce commentaire) article intitulé "[Comment fonctionnent les annotations] (http://www.objectpartners.com/2010/08/06/how-do-annotations-work /) ". –

Répondre

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

Bon pour trouver des champs, mais parfois l'annotation est sur la méthode de l'accesseur. – cosbor11

+0

Qu'en est-il des champs privés? Je crois que cela ne fonctionne pas ... –

+0

Remi D: Les champs privés ne sont pas un problème, il suffit d'appeler field.setAccessible (true); –