Le type de cible de cette expression doit être une interface fonctionnelle dans MethodReferences
Pourquoi le code suivant ne compile.
Consumer con = (s) -> System.out::println;
Il dit
Le type de cible de cette expression doit être une interface fonctionnelle
même si la Consommation est une Interface Fonctionnelle. Ci-dessous fonctionne très bien.
Consumer con2 = (s) -> {System.out.println(s);};
Vous devez vous connecter pour publier un commentaire.
Parce que c'est une méthode de référence, l'utilisation est un peu différente:
L'argument que le consommateur prend (
s
) sera toujours transmis à laprintln
méthode.ici est d'Oracle tutoriel sur ce.
Consumer con = (s) -> System.out::println;
Ici, vous êtes en train d'invoquer le
System.out.println()
avec ce que nous appelons méthode de référence dans Java 8. Lorsque vous avez à faire référence à une méthode d'expression lambda de son doit être de ce genre,Consumer con = System.out::println;
Vous n'avez pas réellement besoin de la
s
appelerprintln
méthode. Méthode de référence prendra soin de cela. Cette::
opérateur signifie que vous appelez laprintln
méthode avec un paramètre et que vous ne vont pas à spécifier son nom.Mais quand vous faites cela,
Consumer con2 = (s) -> {System.out.println(s);};
vous racontez l'expression lambda explicitement println le contenu de
s
qui est parfaitement bien, techniquement, de sorte qu'il ne se pose pas de toute erreur de compilation.