使用AspectJ的Eclipse中出现奇怪的编译器错误



我是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);
    }
}

相关内容

最新更新