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.
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
Vous devez vous connecter pour publier un commentaire.
Groovy n'est que pour vous par défaut (carte constructeur). Vous n'auriez pas besoin d'une méthode de fabrique. Voici un exemple
Mise à JOUR
@codelark de l'astrologie :). Dans le cas où la classe n'est pas accessible à définir des valeurs par défaut, vous pouvez le faire comme
J'ai mis à jour ma question avec ces détails, mais je vais les ajouter ici, pour vous aussi bien. La méthode est pour des fins de test, donc je ne peut pas toucher les valeurs par défaut de la véritable classe Foo.
OriginalL'auteur dmahapatro