Il s'agit de la phase 2 de JEP 302 qui va ajouter le caractère de soulignement comme caractère spécial pour désigner les paramètres inutilisés dans les expressions lambda.
Traitement des caractères de soulignement
Dans de nombreuses langues, il est courant d'utiliser un trait de soulignement ( _
) pour désigner un paramètre lambda sans nom (et de la même manière 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 underscore est un identifiant valide depuis Java 8, la compatibilité nous a obligés à prendre un chemin plus indirect pour arriver à ce que underscore puisse jouer ce rôle dans Java. La phase 1 a consisté à interdire l'underscore comme nom de paramètre formel lambda dans Java 8 (cela n'a eu aucune conséquence sur la compatibilité, puisque les lambdas n'existaient pas auparavant) et un avertissement a été émis pour l'utilisation de l'underscore comme identifiant à d'autres endroits. La phase 2 est arrivée en Java 9, lorsque cet avertissement est devenu une erreur. Nous sommes maintenant libres d'achever la réhabilitation prévue de l'underscore pour indiquer un paramètre formel lambda, méthode ou catch non utilisé.