Maison > Java > javaDidacticiel > Pourquoi une référence de méthode Java avec une valeur de retour fonctionne-t-elle avec l'interface « Consumer » ?

Pourquoi une référence de méthode Java avec une valeur de retour fonctionne-t-elle avec l'interface « Consumer » ?

Patricia Arquette
Libérer: 2024-11-22 18:04:12
original
560 Les gens l'ont consulté

Why Does a Java Method Reference with a Return Value Work with the `Consumer` Interface?

Pourquoi une référence de méthode Java avec un type de retour correspond à l'interface consommateur

Problème

Considérez l'extrait de code suivant :

Consumer<String>         lambda1 = s -> {};
Function<String, String> lambda2 = s -> s;

Consumer<String>         lambda3 = LambdaTest::consume; // but s -> s doesn't work!
Function<String, String> lambda4 = LambdaTest::consume;
Copier après la connexion

Selon l'interface Consumer, il est défini comme void accept(T t); par conséquent, on peut être intrigué par l'affectation de lambda3 car la méthode consume renvoie une chaîne. Étonnamment, lambda4 est également attribué.

Explication

Ce scénario est attribué à la conception flexible des références de méthodes en Java. Il permet d'adapter une méthode à une interface fonctionnelle de la même manière que l'on appelle directement la méthode. En d'autres termes, on peut invoquer n'importe quelle méthode de retour de valeur et ignorer la valeur renvoyée.

Distinction des expressions Lambda

Les expressions Lambda se présentent sous deux formes :

  1. ( arguments) -> expression : valeur compatible si l'expression est évaluée à une valeur.
  2. (args) -> { déclarations* } : compatible avec Void si aucun chemin de code ne tente de renvoyer une valeur.

L'expression s -> s n'est pas compatible avec le vide car s n'est pas une instruction. Cependant, s -> s.toString() peut l'être puisque les invocations de méthodes sont des instructions.

Formulaires compatibles

Les expressions qui peuvent être utilisées comme instructions (conformément à la spécification du langage Java §14.8) incluent :

  • Invocations de méthodes
  • Incrémentation/Décrémentation opérateurs
  • Affectations
  • Expressions de création d'instances de classe

Restriction

Il est important de noter que la forme (arg) -> methodReturningVoid(arg) est la seule forme d'expression qui n'est pas compatible avec les valeurs.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal