nommé de paramètres avec des valeurs par défaut dans groovy

Est-il possible d'avoir nommé des paramètres avec des valeurs par défaut dans groovy? Mon plan est de faire une sorte de fabrique d'objet, qui peut être appelé sans arguments tout en ordre pour obtenir un objet avec les valeurs par défaut. Aussi, j'avais besoin de la fonctionnalité explicitement définissez les paramètres de l'objet. Je crois que c'est possible avec Python mot-clé arguments, par exemple.

Le code que j'essaie en ce moment quelque chose comme ci-dessous

//Factory method
def createFoo( name='John Doe', age=51, address='High Street 11') {
  return new Foo( name, age, address )
}

//Calls
Foo foo1 = createFoo()  //Create Foo with default values
Foo foo2 = createFoo( age:21 )  //Create Foo where age param differs from defaut
Foo foo3 = createFoo( name:'Jane', address:'Low Street 11' )  //You get the picture
//+ any other combination available

La vraie application que je suis en train de travailler sur beaucoup plus de paramètres et donc beaucoup plus de combinaisons nécessaires.

Grâce

Mise à JOUR:

L'usine méthode, je suis la planification des fins de test. Ne peut pas vraiment toucher le réel Foo classe et surtout pas c'est les valeurs par défaut.

@dmahapatro et @codelarks answere ci-dessous a eu un bon point à l'aide d'une Carte comme un param qui m'a donné une idée d'une solution possible. Je pourrais créer une carte avec les paramètres par défaut et remplacer les valeurs nécessaires et passer à la méthode. Ce sera probablement faire le travail et je vais aller avec ça, à moins que je obtenir un indice, d'une meilleure approche.

Mon approche actuelle ci-dessous

defaults = [ name:'john', age:61, address:'High Street']

@ToString(includeFields = true, includeNames = true)
class Foo {
  //Can't touch this :)
  def name = ''
  def age = 0
  def address = ''
}

def createFoo( Map params ) {
  return new Foo( params )
}

println createFoo( defaults )
println createFoo( defaults << [age:21] )
println createFoo( defaults << [ name:'Jane', address:'Low Street'] )

REMARQUE: leftShift opération ( << ) modifie la carte d'origine, donc dans l'exemple ci-dessus en âge de 21 ans dans le dernier appel de méthode. Dans mon cas, ce n'est pas un problème tant que valeurs par défaut de la carte peut être fraîchement créé à chaque fois dans la méthode de configuration.

Ne pas le faire. defaults maintient l'état dans ce cas. Faire local. Voir ma mise à jour.
J'ai réalisé que, d'où la note dans ma mise à jour. De toute façon, à l'aide d'une fonction de carte locale pour les paramètres par défaut est une bien meilleure approche. Merci pour l'astuce.

OriginalL'auteur kaskelotti | 2013-08-01