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
DDDoriginal
2024-11-04 00:29:30297parcourir

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>

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>

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>

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:
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