2013-08-09 12 views
26

Vorrei scrivere un metodo wrapper per un servizio web, il servizio accetta 2 parametri obbligatori e 3 facoltativi.Metodo Groovy con parametri opzionali

Per avere un esempio più breve, vorrei ottenere il seguente codice di lavoro

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

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

L'output è:

12 
a2 
[pParm2:a]2 
a2 
bc 

Quello che vorrei raggiungere è quello di dare un parametro e ottenere 1a come risultato. È possibile (nel modo più pigro)?

risposta

47

non può essere fatto così com'è ... Il codice

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

rende praticamente Groovy creare i seguenti metodi:

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

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

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

Un'alternativa sarebbe quella di avere un optional mappa come 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' 

Ovviamente, documentando questo così altre persone sanno cosa va nella magia map e quali sono le impostazioni predefinite è lasciato al lettore ;-)

+0

Grazie, sembra una buona soluzione. Farò un tentativo e confrontarlo con lo sforzo quando utilizzo i valori NULL come default per i parametri opzionali. Venendo dal mondo java sono abbastanza abituato a questo ... – Chris

+0

Ho ragione, la firma del myMethod dovrebbe essere 'def myMethod (String mandatory1, String mandatory2, Map map = [:])'? –

+1

Altrimenti, a parte, come nella risposta –

30

È possibile utilizzare argomenti con valori predefiniti.

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

se l'argomento "opzionale" non esiste, diventa null.

+0

Ciò che lui/lei già ha fatto. Il problema è che solo gli ultimi argomenti con valori predefiniti possono essere omessi. –

Problemi correlati