在AspectJ中,*和..代表什么意思?

7
我的理解是,.. 表示可以有零个或多个参数,而 * 表示可以有一个任意名称的参数。这样说对吗?
aspectj 是否支持像 args(..,myArg,..) 这样的语法呢?

在Java中,var-arg只能作为最后一个参数(位于末尾)。 - Shark
在你的情况下,编译器/解释器很难/不可能知道传递的哪个参数实际上是 myArg - Mike Park
2个回答

11
这是来自AspectJ网站的内容:http://www.eclipse.org/aspectj/doc/next/progguide/semantics-pointcuts.html *表示除"."外的任意数量字符 ..表示包括任意数量的"."在内的任意数量字符。 更新 从AspectJ in Action - 对于方法签名:
在方法签名中,通配符..用于表示方法所带参数的任何类型和数量。 *表示一个单独的参数。

但是还有这个:"如果是“*”通配符,则任何参数都匹配,如果是特殊通配符“..”,则任意数量的参数都可以匹配"。 - MikePatel
1
是的,你说得对,我已经更新了答案,同时也针对方法签名进行了调整。不过AspectJ并不支持(.., myarg, ..),我也不确定为什么。 - Biju Kunjummen

6

其他人已经回答了部分问题,所以我只想修改一下:

.., bla, ..不能起作用,因为如果将参数bla绑定到一个变量上,当匹配类型在参数列表中出现多次时,可能会有几个匹配的组合。例如:

void foo(int a, String b, String c, File d)

现在的问题是:

before(String bla) : call(void foo(.., bla, ..)) && args(bla)

bla应该绑定到bString值还是cString值?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接