问题描述
我想为webservice编写一个包装方法,该服务接受2个必需参数和3个可选参数。
I would like to write a wrapper method for a webservice, the service accepts 2 mandatory and 3 optional parameters.
有一个简短的例子,我想得到下面的代码:
To have a shorter example, I would like to get the following code working
def myMethod(pParm1='1', pParm2='2') {
println "${pParm1}${pParm2}"
}
myMethod();
myMethod('a')
myMethod(pParm2:'a') // doesn't work as expected
myMethod('b','c')
输出结果为:
The output is:
12
a2
[pParm2:a]2
a2
bc
我想实现的是给出一个参数,并得到 1a
作为结果。
这是可能的(以最懒惰的方式)吗?
What I would like to achieve is to give one parameter and get 1a
as the result.Is this possible (in the laziest way)?
推荐答案
代码
Can't be done as it stands... The code
def myMethod(pParm1='1', pParm2='2'){
println "${pParm1}${pParm2}"
}
基本上可以使groovy创建以下方法: / p>
Basically makes groovy create the following methods:
Object myMethod( pParm1, pParm2 ) {
println "$pParm1$pParm2"
}
Object myMethod( pParm1 ) {
this.myMethod( pParm1, '2' )
}
Object myMethod() {
this.myMethod( '1', '2' )
}
另一种方法是将可选Map作为第一个参数:
One alternative would be to have an optional Map as the first param:
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'
很明显,记录这个以便其他人知道神奇的地图
和默认值留给读者; - )
Obviously, documenting this so other people know what goes in the magical map
and what the defaults are is left to the reader ;-)
这篇关于使用可选参数的Groovy方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!