Version: 1.5.x

参数序号引用

直接在${}中填入从0开始的数字,其中的数字代表方法参数的序号,比如${0}代表方法的第一个参数,${1}代表第二个参数,第n个参数引用用${n-1}表示(这里的n是数字,并不是变量名)

友情提示

代表参数序号的数字只能是整数不能是小数,并且不能是负数

@Request(url = "http://localhost:8080/hello?p1=${0}&p2=${1}&p3=${2}")
String send(int a, int b, int c);

如调用send()方法并传入参数 3, 6, 9, 那么产生的url值就是

http://localhost:8080/hello?p1=3&p2=6&p3=9

以上这种${数字}的形式是参数序号的简化语法,而有时候${}中的数字如果和其它表达式结合起来参与计算,那此时它就不代表数字所对应的参数了,而只是纯粹的数字。如一下例子:

@Request(url = "http://localhost:8080/hello?p1=${0.toString()}")
String send(int num);

如果此时调用方法send(100),那么产生的url将是:

http://localhost:8080/hello?p1=0
提示

这里使用了模板表达式的方法调用语法

这时${}中的0代表的并不是参数num的值,而仅仅就是数字0,作为被调用toString()方法的整数对象。

若想此时也引用参数序号传入参数num的值,并且也参与toString()方法调用的运算,也是有办法的。

这时就要用到参数序号的非简化语法$ + 非负整数了。

@Request(url = "http://localhost:8080/hello?p1=${$0.toString()}")
String send(int num);

如果此时调用方法send(100),那么产生的url将是:

http://localhost:8080/hello?p1=100

这时我们所看到${$0.toString()}就我们所期望的num参数经过调用toString()方法最终返回的结果了。

简化与非简化

说到这里,可能我们有些小伙伴就凌乱了。什么简化的?非简化的?不都是参数序号吗?怎么又变成数字了呢?

别急,其实要区分什么时候是数字,什么时候是参数序号,以及什么是简化参数序号,什么是非简化参数序号是很简单的,只要记住以下3条规则即可。

  1. ${}中只包含一个非负整数时,就是参数序号,且是简化形态的。如:${1}, ${5}等等。

  2. ${}中不只包含一个数字,还有其它东西存在时,那此时里面的数字都只是数字。如${1.toString()}, ${json(0)}等等。

  3. ${}中的非负整数$符号开头,那它就是一个参数序号(非简化的),不管${}中只有一个还是有多个都是。如${$1}, ${json($0)}, $3.compareTo($2)

注意

还有不要忘了参数序号只能是整数,并且不能是负的

参数序号总结

用参数序号方式比变量名方式更为简洁,因为不用定义@Var注解,也不用引用冗长的变量名,是目前比较推荐的引用方式。

不过它也有缺点,就是在参数较多的时候较难立刻对应起来,不够直观,比较影响代码可读性。所以还请根据场景和入参的多寡来决定用哪种引用方式。

Last updated on