C'est la phase 2 de JEP 302 , qui va ajouter un trait de soulignement comme caractère spécial pour désigner les paramètres inutilisés dans les expressions lambda.
Traitement des traits de soulignement
Dans de nombreux langages, il est courant d'utiliser un trait de soulignement ( _
) pour désigner un paramètre lambda sans nom (et de même pour les paramètres de méthode et d'exception):
BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);
Cela permet une vérification statique plus forte des arguments inutilisés et permet également de marquer plusieurs arguments comme inutilisés. Cependant, comme le soulignement était un identifiant valide à partir de Java 8, la compatibilité nous obligeait à emprunter un chemin plus indirect pour arriver à l'endroit où le soulignement pouvait jouer ce rôle dans Java. La phase 1 interdisait le trait de soulignement en tant que nom de paramètre formel lambda dans Java 8 (cela n'avait aucune conséquence sur la compatibilité, car les lambdas n'existaient pas auparavant) et un avertissement a été émis pour l'utilisation de soulignement comme identifiant à d'autres endroits. La phase 2 est arrivée dans Java 9, lorsque cet avertissement est devenu une erreur. Nous sommes maintenant libres de terminer la réhabilitation prévue du trait de soulignement pour indiquer un paramètre formel lambda, une méthode ou une capture non utilisé.
_
il sera interdit en tant que nom d'identifiant légal et pas seulement en tant que nom de paramètre lambda. Ce problème a