Es la Fase 2 de JEP 302 , que va a agregar un subrayado como un carácter especial para denotar los parámetros no utilizados en las expresiones lambda.
Tratamiento de guiones bajos
En muchos idiomas, es común usar un guión bajo ( _
) para denotar un parámetro lambda sin nombre (y de manera similar para los parámetros de método y excepción):
BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);
Esto permite una comprobación estática más sólida de los argumentos no utilizados y también permite marcar varios argumentos como no utilizados. Sin embargo, debido a que el subrayado era un identificador válido a partir de Java 8, la compatibilidad requería que tomáramos una ruta más indirecta para llegar a donde el subrayado podría cumplir esta función en Java. La fase 1 prohibía el subrayado como un nombre de parámetro formal de lambda en Java 8 (esto no tenía consecuencias de compatibilidad, ya que las lambdas no existían anteriormente) y se emitió una advertencia para usar el subrayado como identificador en otros lugares. La fase 2 llegó en Java 9, cuando esta advertencia se convirtió en un error. Ahora tenemos la libertad de completar la rehabilitación planificada del subrayado para indicar un parámetro formal de captura, método o lambda no utilizado.
_
no se permitirá como nombre de identificador legal y no solo como nombre de parámetro lambda. En realidad, esto se solucionó en la compilación 43: bugs.openjdk.java.net/browse/JDK-8061549