🥗 参数序号引用
直接在${}
或{}
中填入从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);
2
如调用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);
2
如果此时调用方法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);
2
如果此时调用方法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)
注意
还有不要忘了参数序号只能是整数,并且不能是负的。
# 参数序号总结
用参数序号方式比变量名方式更为简洁,因为不用定义@Var
注解,也不用引用冗长的变量名,是目前比较推荐的引用方式。
不过它也有缺点,就是在参数较多的时候较难立刻对应起来,不够直观,比较影响代码可读性。所以还请根据场景和入参的多寡来决定用哪种引用方式。