_ (guión bajo) es una palabra reservada

Acabo de reemplazar s en la siguiente expresión lambda por _ :

 s -> Integer.parseInt(s) 

El comstackdor de Eclipse dice:

‘_’ no debe usarse como un identificador, ya que es una palabra clave reservada desde el nivel de origen 1.8 on.

No he encontrado ninguna explicación en el JLS §3.9 Estructura léxica / Palabras clave.

El lugar para buscar es JLS §15.27.1. Parámetros Lambda

Es un error en tiempo de comstackción si un parámetro lambda tiene el nombre _ (es decir, un único carácter de subrayado).

Se desaconseja el uso del nombre de la variable _ en cualquier contexto. Las versiones futuras del lenguaje de progtwigción Java pueden reservar este nombre como palabra clave y / o darle una semántica especial.

Por lo tanto, el mensaje de Eclipse es engañoso, especialmente porque se usa el mismo mensaje para ambos casos, cuando se genera un error para un parámetro lambda o cuando se genera una advertencia para cualquier otro _ .

Cambios en el lenguaje Java para Java SE 9 https://docs.oracle.com/javase/9/language/toc.htm#JSLAN-GUID-16A5183A-DC0D-4A96-B9D8-AAC9671222DD

Desde Java 9, el carácter _ no se puede usar más como un identificador, no solo dentro del contexto lambda

El carácter de guión bajo no es un nombre legal.

Si utiliza el carácter de subrayado (“_”) un identificador, su código fuente ya no se puede comstackr.

Es la Fase 2 de JEP 302 , que va a agregar guiones bajos como un carácter especial para denotar parámetros no utilizados en 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 parámetros de método y de excepción):

BiFunction biss = (i, _) -> String.valueOf(i);

Esto permite una comprobación estática más fuerte de los argumentos no utilizados, y también permite marcar varios argumentos como no utilizados. Sin embargo, como el subrayado era un identificador válido a partir de Java 8, la compatibilidad nos exigía tomar una ruta más indirecta para llegar a donde los subrayados podrían cumplir esta función en Java. La Fase 1 prohibía el guión bajo como un nombre de parámetro formal lambda en Java 8 (esto no tenía consecuencias de compatibilidad, ya que lambdas no existía anteriormente) y se emitió una advertencia para utilizar el subrayado como identificador en otros lugares. La fase 2 vino en Java 9, cuando esta advertencia se convirtió en un error. Ahora somos libres de completar la rehabilitación planificada del guión bajo para indicar una lambda no utilizada, un método o un parámetro formal de captura.