Permettez-moi de vous expliquer pourquoi nous avons ajouté cette fonctionnalité au langage, alors que nous n'en avions clairement pas besoin (toutes les méthodes refs peuvent être exprimées en lambdas.)
Notez qu'il n'y a pas de bonne réponse . Quiconque dit "toujours utiliser une méthode ref au lieu d'un lambda" ou "toujours utiliser un lambda au lieu d'une méthode ref" doit être ignoré.
Cette question est très similaire dans l'esprit à "quand dois-je utiliser une classe nommée par rapport à une classe anonyme"? Et la réponse est la même: quand vous le trouvez plus lisible . Il y a certainement des cas qui sont certainement l'un ou certainement l'autre, mais il y a une foule de gris au milieu, et le jugement doit être utilisé.
La théorie derrière les méthodes refs est simple: les noms comptent . Si une méthode a un nom, il est souvent (mais pas toujours!) Plus clair et lisible de s'y référer par son nom, plutôt que par un sac de code impératif qui, finalement, se retourne et l'invoque.
Les arguments sur les performances ou sur le comptage des caractères sont pour la plupart des harengs rouges, et vous devez les ignorer. Le but est d'écrire un code qui soit parfaitement clair. Très souvent (mais pas toujours!) Les références de méthode gagnent sur cette métrique, nous les avons donc incluses en option, à utiliser dans ces cas.
Une considération clé pour savoir si les références de méthode clarifient ou obscurcissent l'intention est de savoir s'il est évident du contexte quelle est la forme de la fonction représentée. Dans certains cas (par exemple, il est map(Person::getLastName)
assez clair d'après le contexte qu'une fonction qui mappe une chose à une autre est requise, et dans des cas comme celui-ci, les références de méthode brillent. Dans d'autres, l'utilisation d'une méthode ref oblige le lecteur à se demander quel type de la fonction est en cours de description; c'est un signe d'avertissement qu'un lambda peut être plus lisible, même s'il est plus long.
Enfin, ce que nous avons constaté, c'est que la plupart des gens s'éloignent d' abord des références de méthodes car ils se sentent encore plus récents et plus bizarres que les lambdas, et les trouvent donc initialement "moins lisibles", mais avec le temps, lorsqu'ils s'habituent à la syntaxe, changent généralement de comportement et se tournent vers les références de méthodes quand ils le peuvent. Soyez donc conscient que votre propre réaction subjective initiale «moins lisible» implique presque certainement un certain biais de familiarité, et vous devriez vous donner une chance de vous familiariser avec les deux avant de rendre une opinion stylistique.