Est-il possible de créer un object sans déclarer de classe?

Est-il possible de créer un object sans déclarer de classe? Comme dans JavaScript obj = {a: '1'}; console.log(obj.a) obj = {a: '1'}; console.log(obj.a)

Dans Groovy, vous devez toujours fournir la classe d’un object en cours de création, il n’y a donc pas d’équivalent dans Groovy à la syntaxe littérale object de JavaScript.

Cependant, Groovy a une syntaxe littérale pour une Map , qui est conceptuellement très similaire à un object JavaScript, c’est-à-dire que les deux sont une collection de propriétés ou de paires nom-valeur.

Le code Groovy équivalent au code JavaScript ci-dessus est le suivant:

 def obj = [a: '1'] println obj.a 

Même si aucun nom de classe n’est utilisé ici, vous créez toujours un object d’une classe particulière ( java.util.LinkedHashMap ). Le code ci-dessus est juste un raccourci pour:

 def obj = new LinkedHashMap(); obj.a = '1' println obj.a 

La classe Expando est peut-être encore plus similaire à un object JavaScript et est utile lorsque vous souhaitez éviter la “surcharge” de définition d’une classe ou que vous souhaitez un object dynamic auquel une propriété arbitraire peut être ajoutée au moment de l’exécution.

Un peu surpris que personne n’ait mentionné la classe Expando. Cela ajoute des fonctionnalités supplémentaires sur une carte en ce sens que vous pouvez directement référencer des propriétés dans vos fonctions. Exemple de code ci-dessous.

 def expando = new Expando(a:"def") expando.run = {def b -> println("$a") println("$b") } expando.run("ABC") def map = [a:"def"] map.run = {def b -> println("$a") //THIS DOES NOT WORK. You will get a missing property exception. println("$b") } map.run("ABC") 

sortie imprimée:

déf

abc

groovy.lang.MissingPropertyException

ABC (si vous commentez le println ($ a) dans map.run, println ($ b) imprime ABC)

Ignorer les sauts de ligne supplémentaires dans la sortie. Avait un sacré temps à mettre def et ABC sur des lignes consécutives.

Consultez la documentation de l’API Expando pour plus d’informations.

Groovy a une notation équivalente pour json. La seule différence est qu’ils utilisent [:] pour les cartes au lieu de {}. Donc, vous pouvez clairement convertir un json dans une notation d’object groovy.

 import groovy.json.JsonOutput def obj = [:] //define map obj.batsmen = [] //define array def b = [:] b.name= "V. Kohli" b.score = 55 b.ssortingke = false obj.batsmen.push(b) //push second object obj.batsmen.push(b) println JsonOutput.toJson(obj) 

Ici, je n’ai pas imprimé l’object directement. Comme il sera imprimé avec des accolades carrées.

Lire l’article entier Groovy pour les développeurs javascript. https://metamug.com/article/groovy-for-javascript-developers.php