id | title | sidebar_label |
---|---|---|
refer_index | 参数序号引用 | 参数序号引用 |
直接在${}
中填入从0
开始的数字,其中的数字代表方法参数的序号,比如${0}
代表方法的第一个参数,${1}
代表第二个参数,第n个参数引用用${n-1}
表示(这里的n是数字,并不是变量名)
:::info 友情提示 代表参数序号的数字只能是整数,不能是小数,并且不能是负数。 :::
@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
:::info 提示 这里使用了模板表达式的方法调用语法 :::
这时${}
中的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}
,${5}
等等。
${}
中不只包含一个数字,还有其它东西存在时,那此时里面的数字都只是数字。如${1.toString()}
,${json(0)}
等等。
${}
中的非负整数
以$
符号开头,那它就是一个参数序号(非简化的),不管${}
中只有一个还是有多个都是。如${$1}
,${json($0)}
,$3.compareTo($2)
:::caution 注意 还有不要忘了参数序号只能是整数,并且不能是负的。 :::
参数序号总结
用参数序号方式比变量名方式更为简洁,因为不用定义@DataVariable
注解,也不用引用冗长的变量名,是目前比较推荐的引用方式。
不过它也有缺点,就是在参数较多的时候较难立刻对应起来,不够直观,比较影响代码可读性。所以还请根据场景和入参的多寡来决定用哪种引用方式。