Comprendre la compatibilité des références de méthode avec l'interface consommateur
Malgré le titre, "Pourquoi une référence de méthode Java avec un type de retour correspond-elle à l'interface consommateur interface?", les expressions lambda et les références de méthodes possèdent une relation complexe qui s'étend au-delà de la simple correspondance de types. Examinons ce sujet et clarifions les subtilités impliquées.
Lors de la définition d'une expression lambda avec un type de retour, tel que lambda1 et lambda2 dans l'exemple de code, elle adhère à la signature de type de l'interface fonctionnelle qu'elle implémente. Cependant, le cas surprenant se produit avec les références de méthodes.
Considérez lambda3 et lambda4, qui font référence à la méthode consume. Intuitivement, nous pourrions nous attendre à ce que lambda3 échoue en raison de la non-concordance entre le type de retour de consume (String) et le type de retour void attendu de l'interface Consumer. Cependant, au lieu d'échouer, lambda3 réussit.
La réponse réside dans le principe de conception derrière les références de méthodes. Ils visent à permettre l'adaptation des méthodes aux interfaces fonctionnelles, quelles que soient leurs valeurs de retour. Dans ce cas, la valeur de retour de la méthode consume (String) est apparemment ignorée, ce qui lui permet de se conformer aux exigences vides de l'interface Consumer.
Fait intéressant, le même principe s'applique aux expressions lambda. La forme lambda (args) -> L'expression est compatible avec les valeurs uniquement si l'expression est évaluée à une valeur non-instruction. Cependant, si l'expression est une instruction elle-même (par exemple, appel de méthode, incrémentation/décrémentation), elle devient compatible avec void. Ainsi, consumer représente une forme valide compatible avec le vide.
À titre d'exception notable, la forme (arg) -> methodReturningVoid(arg) est la seule expression qui manque de compatibilité de valeurs. Comprendre ces complexités améliore notre compréhension des expressions lambda et des références de méthodes de Java, nous permettant d'exploiter efficacement leurs capacités.
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!