Méthode de Groovy avec paramètres optionnels

je voudrais écrire une méthode de wrapper pour un service web, le service Accepte 2 paramètres obligatoires et 3 optionnels.

pour avoir un exemple plus court, je voudrais que le code suivant fonctionne

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

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

La sortie est:

12
a2
[pParm2:a]2
a2
bc

Ce que je voudrais atteindre est de donner un paramètre et get 1a comme résultat. Est-ce possible (de la manière la plus paresseuse)?

31
demandé sur fejese 2013-08-09 18:28:45

2 réponses

ne peut être fait tel quel... Le code

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

En Gros fait groovy créer les méthodes suivantes:

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

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

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

une alternative serait d'avoir une carte optionnelle comme premier paramètre:

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'

évidemment, documenter cela pour que les autres sachent ce qui se passe dans la magie map et quels sont les paramètres par défaut sont laissés au lecteur ;-)

52
répondu tim_yates 2013-08-09 14:45:07

Vous pouvez utiliser des arguments avec des valeurs par défaut.

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

si l'argument "optionnel" n'existe pas, il devient null.

35
répondu Alex 2014-12-23 23:33:08