Chr*_*ris 45 syntax groovy optional-parameters
我想为webservice编写一个包装器方法,该服务接受2个强制参数和3个可选参数.
为了有一个更短的例子,我想得到以下代码
def myMethod(pParm1='1', pParm2='2') {
println "${pParm1}${pParm2}"
}
myMethod();
myMethod('a')
myMethod(pParm2:'a') // doesn't work as expected
myMethod('b','c')
Run Code Online (Sandbox Code Playgroud)
输出是:
12
a2
[pParm2:a]2
a2
bc
Run Code Online (Sandbox Code Playgroud)
我想要实现的是给出一个参数并得到1a结果.这是可能的(以最懒惰的方式)?
tim*_*tes 68
不能这样做......代码
def myMethod(pParm1='1', pParm2='2'){
println "${pParm1}${pParm2}"
}
Run Code Online (Sandbox Code Playgroud)
基本上使groovy创建以下方法:
Object myMethod( pParm1, pParm2 ) {
println "$pParm1$pParm2"
}
Object myMethod( pParm1 ) {
this.myMethod( pParm1, '2' )
}
Object myMethod() {
this.myMethod( '1', '2' )
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是将可选的Map作为第一个参数:
def myMethod( Map map = [:], String mandatory1, String mandatory2 ){
println "${mandatory1} ${mandatory2} ${map.parm1 ?: '1'} ${map.parm2 ?: '2'}"
}
myMethod( 'a', 'b' ) // prints 'a b 1 2'
myMethod( 'a', 'b', parm1:'value' ) // prints 'a b value 2'
myMethod( 'a', 'b', parm2:'2nd') // prints 'a b 1 2nd'
Run Code Online (Sandbox Code Playgroud)
显然,记录这一点让其他人知道神奇的内容map和默认值是留给读者的;-)
Ale*_*lex 31
您可以使用具有默认值的参数.
def someMethod(def mandatory,def optional=null){}
Run Code Online (Sandbox Code Playgroud)
如果参数"optional"不存在,则变为null.
小智 5
只是蒂姆答案的简化。正如已经建议的那样,最常规的方法是使用地图,但是接下来让我们将强制参数也放入地图中。这看起来像这样:
def someMethod(def args) {
println "MANDATORY1=${args.mandatory1}"
println "MANDATORY2=${args.mandatory2}"
println "OPTIONAL1=${args?.optional1}"
println "OPTIONAL2=${args?.optional2}"
}
someMethod mandatory1:1, mandatory2:2, optional1:3
Run Code Online (Sandbox Code Playgroud)
输出:
MANDATORY1=1
MANDATORY2=2
OPTIONAL1=3
OPTIONAL2=null
Run Code Online (Sandbox Code Playgroud)
这看起来更好,这样做的好处是您可以根据需要更改参数的顺序。
| 归档时间: |
|
| 查看次数: |
84935 次 |
| 最近记录: |