L'article actuel de Wikipedia sur le langage de programmation Groovy explique que "les fichiers Java les plus valides sont également des fichiers Groovy valides" et donne les exemples suivants, en premier lieu du code Java:
for (String it : new String[] {"Rod", "Carlos", "Chris"})
if (it.length() <= 4)
System.out.println(it);
Puis la même chose dans Groovy:
["Rod", "Carlos", "Chris"].findAll{it.size() <= 4}.each{println it}
Notez dans le premier exemple que nous avons utilisé la méthode Java parfaitement ordinaire, Java.lang.String.length () . Dans le deuxième exemple, cette méthode a été mystérieusement remplacée par un appel à une méthode appelée size()
. J'ai vérifié que le deuxième exemple est du code Groovy valide et qu'il a le comportement correct.
Java.lang.String
n'a pas de méthode appelée size()
. Groovy ne sous-classe pas String
pour ses propres besoins:
String s = ""
Class c = s.getClass()
println c.getName() // "Java.lang.String"
il n’a pas non plus ajouté de méthodes supplémentaires à l’objet String
:
// [...]
for (def method : c.getMethods()) {
println method.getName()
}
// prints a whole bunch of method names, no "size"
et pourtant, ce code fonctionne toujours:
// [...]
println s.size() // "0"
Je ne trouve aucune documentation Groovy pour expliquer cela.
size()
?length()
et pourquoi n'est-il pas préférable?Java.lang.String
?Groovy ajoute de nombreuses méthodes aux chaînes et à toutes sortes d’autres classes. Toutes les méthodes de confort font partie des raisons pour lesquelles Groovy est génial.
Java.lang.String
implémente Java.lang.CharSequence
, et c’est de là que vient tout (en grande partie) la magie. size()
, par exemple. Groovy ajoute une méthode size()
à la plupart des objets pouvant avoir une taille que vous considéreriez comme une taille, de sorte que vous puissiez utiliser une méthode cohérente dans l'ensemble du tableau. length()
est toujours entièrement valide, Groovy ne l'enlève pas.
Pour voir certaines des méthodes ajoutées par Groovy, consultez le GDK , et en particulier CharSequence et Collection .
Je vous suggère de lire le doc de la classe Groovy StringGroovyMethods
, il donne des explications simples sur la façon dont les choses fonctionnent avec Groovy.
Les méthodes statiques sont utilisées avec le premier paramètre correspondant à la classe de destination, par exemple public static String reverse (String self) fournit une méthode reverse () pour String.