Expression Lambda vs méthode de référence

IntelliJ conserve propose de me remplacer mes expressions lambda avec la méthode de référence.

Est-il un objectif de différence entre les deux?

  • C'est juste la même choses, MAIS ne trouvez-vous pas quelque chose de beau comme files.stream().map(File::getName)?
  • Pas vraiment, je ne vois pas de n'importe quel objet! Il ressemble à un appel statique pour moi
  • "on dirait que" n'est pas un argument, je crois.
  • Bien sûr! Mais "vous ne trouvez pas" non plus... C'est une question de goût, j'étais plus inquiet au sujet des aspects plus techniques. En fait, comme vous l'avez déjà dit qu'ils sont les mêmes, c'est une bonne réponse pour moi. De toute façon, comme IntelliJ le propose, je pense qu'il est généralement plus apprécié de voir une référence à une méthode qu'un lambda (pas pour moi, tout de même).
  • Je suppose que l'aide lambda est un peu plus de frais généraux pour la création de la lambda (anonyme en fonction de la classe et d'instance) et de l'appeler. Mais de toute façon si vous voulez juste de faire appel à une sortie de la méthode, j'irais avec la méthode de pointeur, trop. C'est juste plus propre. Si vous utilisez lambda, vous avez juste à visuellement analyser l'expression de vérifier si il n'y a peut-être un - cachés ou des trucs.
  • J'avais parier que java fait la même chose avec la méthode de référence.
  • Il semble donc que la seule discussion à propos de la syntaxe, et qui semble plutôt subjective (avec quelques exceptions).
  • La surcharge de l'un ou l'autre est un détail d'implémentation, et est lié à être très variable, en tendant vers zéro, comme le soutien de lambda évolue dans le HotSpot.
  • Le code d'une expression lambda est compilé pour une méthode synthétique, tandis que la méthode références de travail sans (à l'exception des constructions spéciales comme Type[]::new). La classe anonyme généré lors de l'exécution sera la même. Le JRE ne pas faire de différence entre eux. Donc, en utilisant une méthode de référence, vous fera économiser une méthode dans le code compilé, d'autre part, vous ne pouvez pas vous arrêter chez eux lorsque cette étape-par-étape de débogage...
  • Maintenant, la question va être fermé... dommage pour tous les utilisateurs comme moi qui ne savent pas la différence entre les lambdas et des références, même si il n'y a pas tout qui est décisive. Je me demande aussi pourquoi personne n'a osé répondre à cela? C'est la bonne réponse pour moi.
  • Répondant à l'âge de deux ans question fermée est probablement une mauvaise idée, mais pour ceux qui ont LU la question, c'est ce que l'Oracle tutoriel (docs.oracle.com/javase/tutorial/java/javaOO/...) dit: Méthode de références ... sont compact, facile à lire les expressions lambda, pour les méthodes qui ont déjà un nom.
  • Eh bien, je suis un peu surpris que personne n'a mentionné cette différence MAJEURE: l'expression setCallback(object::method); jette NPE si object == null, mais setCallback(() -> object.method()); ne pas!
  • Quelques mots semblent manquants de votre commentaire. Pouvez-vous élaborer sur la façon dont chacun est compilé et ensuite l'exécuter ? Si elles sont de la même (ou presque) dans la performance, je serais normalement ont tendance à aller pour une méthode de référence, comme le code de l'instruction le but est plus clair.
  • le format d'un commentaire n'est pas suffisante pour décrire les détails (plus que mon commentaire précédent est déjà fait). Vous pouvez la lire ceci et ça, si vous êtes intéressé par plus de détails. Mais la vente à emporter concernant votre question est simple: il n'y a pas de différence significative, si vous préférez la méthode de références, d'aller pour elle. Il suffit de ne pas essayer de plier le code à utiliser excessivement, c'est à dire quand une lambda est beaucoup plus simple, ne pas rester à l'écart de l'utiliser.

InformationsquelleAutor Gerard | 2014-06-30