Maison > Java > javaDidacticiel > Quand une référence de méthode n'est-elle pas équivalente à une expression Lambda ?

Quand une référence de méthode n'est-elle pas équivalente à une expression Lambda ?

DDD
Libérer: 2024-11-04 00:29:30
original
422 Les gens l'ont consulté

When is a Method Reference Not Equivalent to a Lambda Expression?

Référence de méthode vs expression Lambda : exploration de l'équivalence de System.out::println

Lors de l'utilisation d'une référence de méthode telle que System.out ::println, la fonction évalue d'abord System.out et capture la valeur résultante dans une expression lambda. Par exemple, l'équivalent lambda de cette référence de méthode serait :

<code class="java">Consumer<Integer> consumer = System.out::println;</code>
Copier après la connexion

Cette expression lambda se comporte de manière similaire au code ci-dessous :

<code class="java">Consumer<Integer> consumer = new Consumer<Integer>() {
    @Override
    public void accept(Integer i) {
        System.out.println(i);
    }
};</code>
Copier après la connexion

Cependant, la référence de méthode System.out : :println offre un avantage par rapport à l'expression lambda car elle évalue toujours System.out au moment de la compilation. Dans le cas de l'expression lambda, System.out est évalué à chaque fois que la méthode est invoquée.

Pour garantir un équivalent exact à la référence de la méthode, le code suivant doit être utilisé :

<code class="java">PrintStream printStream = Objects.requireNonNull(System.out);
Consumer<Integer> consumer = o -> printStream.println(o);</code>
Copier après la connexion

Ici, printStream est une variable capturant la valeur System.out, garantissant que toute modification ultérieure apportée à System.out n'affectera pas ce consommateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal