Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AspectJ“;声明错误“;未按预期捕获方法。为什么?_Java_Aspectj - Fatal编程技术网

Java AspectJ“;声明错误“;未按预期捕获方法。为什么?

Java AspectJ“;声明错误“;未按预期捕获方法。为什么?,java,aspectj,Java,Aspectj,我定义了一个点类: public class Point { ... public String toString() { return "abc"; } } 以及一个应该注意的方面,即没有人重写其toString()方法: declare error : execution(public String Point+.toString()) && !execution(public String Point.toString())

我定义了一个
类:

public class Point {
    ...
    public String toString() {
        return "abc";
    }
}
以及一个应该注意的方面,即没有人重写其
toString()
方法:

declare error
    : execution(public String Point+.toString()) && !execution(public String Point.toString()) 
    : "Forbidden execution operation!";

declare error
    : call(public String Point+.toString()) && !call(public String Point.toString()) 
    : "Forbidden call operation!";
但是,在键入以下代码时,没有任何错误标记:

class Point4 extends Point {
    public Point4(int x, int y) {
        super(x, y);
    }

    @Override
    public String toString() { //I'd be expecing a compilation error here.
        return super.toString();
    }
}

public class Main {
    public static void main(String[] args) {
        Point4 p = new Point4(2, 3);
        System.out.println(p.toString()); //I'd be expecting a compilation error here
    }
}
我做错了什么


谢谢

此声明错误将捕获无效的
toString
方法的所有声明:

declare error
: !within(Point) && execution(public String Point.toString()) 
: "Forbidden call operation!";
这让你走了一半的路。另一部分是使用以下内容:

declare error
: call(public String (Point+ && !Point).toString())
: "Forbidden call operation";
我不太清楚为什么这个声明的变体不起作用,但是上面的切入点更短、更明确,并且是推荐的(最重要的是……工作正确)