我是AspectJ(Eclipse内部)的新手。我在编码一个简单的类时发现了一个问题,我需要它来获得一个输入参数(在这个例子中是一个简单值)。
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编译器在"after(int value)"中抛出错误:此方法必须返回int类型的结果。
- 我尝试刷新(F5)+清理项目,但不起作用
- 我尝试了另一个例子,它定义了相同的概念,编译器抛出了相同的错误
你能帮我吗?
谢谢。
帕科。
方面在这里编译得很好。编译错误可能来自另一个类,您在该类中执行以下操作:
int start(int number) {
System.out.println("Number = " + number);
}
也就是说,您定义了一个具有int
返回类型的方法,但根本不返回int
,或者至少不总是像这个错误的例子中那样:
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;
}
}
}
在本例中,如果a <= b
,则不返回任何错误。也许你做了类似示例1或2中的事情。
顺便说一句,您的切入点中确实有一个错误,但不是一个使其不可编译的错误,而是一个使它与任何方法执行都不匹配的错误:您需要删除target(int)
部分,因为这意味着您想要匹配类int
的方法,但首先int
是在JDK中定义的(它不是由AspectJ编织的),其次int
根本不是一个类,而是一种基元类型。也许你想要这个:
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);
}
}