Les annotations des classe

Fermé
amani - 13 avril 2012 à 14:31
 amani - 13 avril 2012 à 18:17
Bonjour,

j'ai des classe annotés par l'annotation "states" dans la classe "Test", pour récupérer les classes annotés j'ai placé dans la classe "busniss"le code suivant:

public static String GetAnnotatedClass(){
try
{
for(Class<?> classe:Test.class.getClasses())
{

if(classe.isAnnotationPresent(Test.states.class))
{
Test.states a1= (states) classe.getAnnotation(Test.states.class);
return a1.statesName();
}
}
return null;
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
return null;
}

}

ça me parait juste mais il me retounne un null prk?

2 réponses

KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
13 avril 2012 à 14:42
Visiblement le programme ne rentre pas dans la boucle if, il faudrait rajouter un affichage pour savoir s'il rentre ou non dans la boucle for et un autre pour savoir ce qui se passe avec la annotations :

for(Class<?> classe : Test.class.getClasses())
{
    System.out.println(classe);
    System.out.println(classe.getAnnotations().length);

    if (classe.isAnnotationPresent(Test.states.class))
   {
        Test.states a1= (states) classe.getAnnotation(Test.states.class);
        return a1.statesName();
    }
}
1
oui j'ai essayé le même truc déjà le programme lit tt les classes annotés ou non mais n'entre pas ds la boucle if
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
13 avril 2012 à 15:04
Donc soit la classe Test.states n'est pas présente dans les classes retournées, soit elle n'est pas visible au moment de l'exécution; il faut la déclarer @Retention(value=RUNTIME)
0
oui @Retention est déjà déclarée
je pense qu'il faut ajouter target: class ici:
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
nn?
0
j'ai trouvé la faute j'ai ajouté ces deux lignes une seule fois ou lieu de les ajouter au dessus de chaque annotation définit(j'ai cru qu'une seule fois est visible par toutes les définitions des annotations) comme ça , tt marche .Merci
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)
0
Une autre question svp
dans ma classe Test j'ai un ensemble des classes annotés (la question précédente) et dans chaque classe un ensemble des méthodes annotés je fait la même chose pour les méthodes, je veux trouver toutes les méthodes annotés: mais cela ne marche pas (même j'ai essayé de parcourir toutes les classes dans la classe Test puis toutes les méthodes de chaque classe mais la même chose ça retourne un null)
try
{

for (Method m : Test.class.getMethods())
{
if (m.isAnnotationPresent( Test.action.class))
{
Test.action a = m.getAnnotation(Test.action.class);
String s = a.actionName();
System.out.println(s);
actions.add(s);
}
}
}
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
13 avril 2012 à 17:26
En faisant Test.class.getMethods() tu récupères les méthodes de la classe Test, or si j'ai bien compris ce sont les méthode des classes dans Test qui t'intéresse !

for (Class<?> classe : Test.class.getClasses())
for (Method m : classe.getMethods())
{
    // ...
}
0
oui j'ai essayé cela (c sure que j'ai commis une faute )voilà:
for (Class<?> c : Test.class.getClasses())
for(Method m: c.getMethods())
{
if (m.isAnnotationPresent( Test.action.class))
{
Test.action a = m.getAnnotation(Test.action.class);
String s = a.actionName();
System.out.println(s);
actions.add(s);

}
0
ops c ma faute j'ai écrit
for(Method m: c.getClass.getMethods())
et c est déjà une classe, merci :)
0