gpt4 book ai didi

java - aspectj 中的 After()

转载 作者:行者123 更新时间:2023-11-29 05:16:51 25 4
gpt4 key购买 nike

我是 aspectj 的新手,我有一个函数可以获取整数变量并将其加 100,如下所示

public static void add(int no)
{
no=no+100;


}

我的方面如下

pointcut printMessage(int m) : execution(* add(..)) && args(m);
after(int m) returning: printMessage(m) {
System.out.println(m);
}

我用值 10 调用函数。但是当我运行代码时,它返回结果为 10。谁能告诉我为什么它不返回 110。如果我错了请纠正我

最佳答案

因为在 java 中 int 是不可修改的。如果你写

int i = 10;
add(i);
System.out.println(i);

您仍然会得到 10。因此,您的切面按照您的要求执行:您将一个值为 10 的变量传递给一个函数,该函数使用它的本地副本执行它想要的操作,然后返回变量不变

编辑:

如果你想获得一个修改后的值,你可以传递一个像数组这样的可修改变量,或者更简单地使用返回值(因为你当前的添加是一个无操作):

这里编辑 2 是完整的测试代码:

public class AspectTest {
public static int add(int i) {
return i+100;
}

@Test
public void test() throws Exception {
int j = add(10);
assertEquals(110, j);
add(20);
}
}

和:

aspect A {
pointcut printMessage() : execution(* add(..));
after() returning (int m): printMessage() {
System.out.println(m);
}
}

输出:

Running ...AspectTest
110
120
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.214 sec

关于java - aspectj 中的 After(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26251068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com