/ / Ennu de Groovy - chaînes d’appel - groovy, enums, chaîne

Groovy enums - chaînes d’appel - groovy, enums, chain

Je suis surpris de voir que l'enchaînement d'appels à unEnum fonctionne. J'ai eu une instance enum appelée "nom" et qui a été référencé à la place du nom () lorsque j'ai oublié les crochets. Enum "s devrait-il permettre l’enchaînement des appels? Utilisation de Groovy 2.4.10 - Voir les 3 derniers appels ci-dessous:

Groovy Shell (2.4.10, JVM: 1.8.0_121)
Type ":help" or ":h" for help.

groovy:000> public enum Compass { north, south }
===> true
groovy:000> Compass.north
===> north
groovy:000> Compass.north.name
ERROR groovy.lang.MissingPropertyException:
No such property: name for class: Compass
groovy:000> Compass.north.name()
===> north
groovy:000> public enum Compass { north, south, name }
===> true
groovy:000> Compass.north.name()
===> north
groovy:000> Compass.north.name
===> name
groovy:000> Compass.north.south
===> south
groovy:000> Compass.north.south.north
===> north

Réponses:

1 pour la réponse № 1

C'est correct. Les énumérations, en Java, sont un sucre syntaxique (plus des choses utiles comme values() et name()) sur des champs statiques de la même classe. Ainsi, lorsque vous appelez un champ enum, vous avez également une référence statique à cette classe, qui a également accès aux autres champs de la classe:

class Compass {
static NORTH = new Compass()
static SOUTH = new Compass()
}


assert Compass.NORTH.SOUTH.NORTH == Compass.NORTH

def west = new Compass()
assert west.SOUTH == Compass.SOUTH