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

时间:2013-06-25 15:31:27

标签: eclipse compiler-errors aspectj

我是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 Compiler在“after(int value)”中抛出错误:此方法必须返回int类型的结果。

  • 我尝试刷新(F5)+清理项目但不起作用。
  • 我尝试了另一个定义相同概念的例子,编译器抛出相同的错误。

你能帮帮我吗?

感谢。

帕。

1 个答案:

答案 0 :(得分:0)

这方面很好地汇编了。编译错误可能来自另一个类,你可以这样做:

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的方法,但首先在JDK中定义int(它不是由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);
    }
}