Ma question est la suivante; veuillez aider.Traitement d'annotation d'exécution
J'ai une annotation applicable aux méthodes seulement que je veux être traité lors de l'exécution, par exemple
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {
String name();}
Et voici mon processeur:
public class MyAnnoProcessor(Class cls){
Method[] m = cls.getClass().getMethods();
...// read the value passed to name and create an instance of an object depending on the value of 'name'
Oui. MyAnnoProcessor code est le suivant:
public class MyAnnoProcessor(Class cls){
Method[] methods = cls.getMethods();
for(Method m: methods){
MyAnno an = (MyAnno) m.getAnnotation(MyAnno.class);
if(an!=null)
sysout(an.name());
....//call another method to create a class based on the value passed to 'name'
Maintenant, j'ai une classe où je veux écrire de nombreuses méthodes annotées avec @MyAnno mais chaque méthode passe une valeur différente de « nom ». Suis juste incapable de trouver un moyen de gérer le traitement des annotations d'une manière idéale? Comment 'MyAnnoProcessor' devrait-il savoir quel (objet) doit être retourné à quelle méthode?
Dis, je le fais dans une méthode A:
@MyAnno(name="testA")
public void A(){
MyAnnoProcessor(this);
...}
Et encore une fois je le fais dans la méthode B:
@MyAnno(name="testB")
public void B(){
MyAnnoProcessor(this);
...}
Le 'MyAnnoProcessor' semble lire la valeur de 'nom' comme "testA" et non "testB" dans l'appel suivant de la méthode B. Où est-ce que je me trompe? S'il vous plaît donnez votre avis.
Pouvez-vous coller tout le code pour le 'MyAnnoProcessor 'classe? Vous obtenez toutes les méthodes, mais à un moment donné, vous devriez distinguer entre 'A()' et 'B()' pour traiter les annotations correctement? – prabugp
Vous devrez éditer votre question et coller le code. Je vois encore moins de code maintenant. – prabugp
Oui, édité dans la question. Je ne sais pas comment distinguer si c'est A() ou B() l'appelant. – 5122014009