Maison >Java >javaDidacticiel >Quand une référence de méthode n'est-elle pas équivalente à une expression Lambda ?
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!