2013-06-25 4 views
0

Je suis novice avec AspectJ (dans Eclipse). J'ai trouvé un problème en codant une classe simple dont j'ai besoin pour obtenir un paramètre d'entrée (dans cet exemple, c'est une valeur simple).Étrange erreur de compilation dans Eclipse en utilisant AspectJ

public aspect TestingAspectJ 
{ 
    pointcut start(int value) : target(int) && execution(void start(int)) && args(value); 

    after(int value) : start(value) 
    { 
     System.out.println("Hello World! My value is " + value); 
    } 
} 

AspectJ compilateur génère une erreur "après (valeur int)": Cette méthode doit renvoyer un résultat de type int.

  • J'ai essayé de rafraîchir (F5) + Nettoyer le projet et ne fonctionne pas.
  • J'ai essayé avec un autre exemple qui définit le même concept et le compilateur renvoie la même erreur.

Pourriez-vous m'aider?

Merci.

Paco.

Répondre

0

L'aspect compile bien ici. Probablement l'erreur de compilation provient d'une autre classe où vous faites quelque chose comme ceci:

int start(int number) { 
    System.out.println("Number = " + number); 
} 

I.e. vous définissez une méthode avec int type de retour, mais ne retournez pas un int du tout ou du moins pas toujours comme dans cet exemple erroné:

int max(int a, int b, int c) { 
    if (a > b) { 
     if (a > c) { 
      return a; 
     } else if (b > c) { 
      return b; 
     } else { 
      return c; 
     } 
    } 
} 

Dans cet exemple, si a <= b, rien est retourné qui est un bug. D'ailleurs, vous avez fait quelque chose comme dans l'exemple 1 ou 2.

Par ailleurs, vous avez un bug dans votre pointcut, mais pas un qui le rend incompilable, juste un qui le rend non conforme aux exécutions de méthodes: Vous devez supprimer la partie target(int) car cela signifie que vous voulez correspondre à des méthodes de classe int, mais d'abord int est défini dans le JDK (qui n'est pas tissé par AspectJ) et d'autre part int n'est pas une classe du tout, mais un type primitif. Probablement vous le vouliez:

public aspect TestingAspectJ { 
    pointcut start(int value) : execution(void start(int)) && args(value); 

    after(int value) : start(value) { 
     System.out.println("Hello World! My value is " + value); 
    } 
} 
+0

Merci kriegaex – pakkk

Questions connexes