2013-08-09 11 views
26

webserviceのラッパーメソッドを記述したいと思います。このサービスでは、2つの必須パラメータと3つのオプションのパラメータを受け入れます。私が達成したい何オプションのパラメータを使用したGroovyメソッド

12 
a2 
[pParm2:a]2 
a2 
bc 

、1つのパラメータを与え、得ることです:

短い例を持っているために、私は次のコードが出力され

def myMethod(pParm1='1', pParm2='2') { 
    println "${pParm1}${pParm2}" 
} 

myMethod(); 
myMethod('a') 
myMethod(pParm2:'a') // doesn't work as expected 
myMethod('b','c') 

の作業を取得したいと思います結果として1aとなる。 これは(怠惰な方法で)可能ですか?それが立つよう

答えて

47

を行うことができません...コード

def myMethod(pParm1='1', pParm2='2'){ 
    println "${pParm1}${pParm2}" 
} 

は基本的にグルーヴィーには、次のメソッドを作成します:

Object myMethod(pParm1, pParm2) { 
    println "$pParm1$pParm2" 
} 

Object myMethod(pParm1) { 
    this.myMethod(pParm1, '2') 
} 

Object myMethod() { 
    this.myMethod('1', '2') 
} 

1つの選択肢は、オプションとして地図を持っているだろう最初のパラメータ:

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' 

明らかに、これを文書化することで、魔法mapとデフォルトの値は読者に残されます;-)

+0

ありがとうございます、行く方法のように思えます。私はそれにショットを与え、オプションのパラメータのデフォルトとしてNULL値を使用するときの作業と比較します。 Javaの世界から来て、私はそれにかなり慣れています... – Chris

+0

myMethodの署名は 'def myMethod(String mandatory1、String mandatory2、Map map = [:])'にする必要がありますか? –

+1

答えがそうでないように、他の方法で回 –

30

デフォルト値で引数を使用できます。

def someMethod(def mandatory,def optional=null){} 

引数 "optional"が存在しない場合、nullになります。

+0

これは彼/彼女がすでにやったこと。問題は、デフォルト値を持つ最後の引数だけを省略できることです。 –

関連する問題