web-dev-qa-db-fra.com

Pourquoi Groovy remplace-t-il Java.lang.String.length () par size ()?

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.

  • D'où vient size()?
  • Pourquoi n'apparaît-il pas sur l'objet?
  • Pourquoi a-t-il été ajouté?
  • Qu'est-ce qui n'allait pas avec length() et pourquoi n'est-il pas préférable?
  • Quelles autres méthodes supplémentaires ont été ajoutées à Java.lang.String?
  • Qu'en est-il des autres cours standard?
12
qntm

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 .

13
doelleri

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. 

0
Thiht