java lambda java-8 underscores

java - ¿Por qué un solo carácter de subrayado es un nombre ilegal para un parámetro lambda?



java-8 underscores (1)

Intenté nombrar un parámetro lambda _ , por ejemplo (una versión reducida):

Consumer<Object> c = _ -> {};

ya que quería indicar que se estaba ignorando un parámetro, pero obtuve el siguiente error del compilador:

el uso de ''_'' como identificador está prohibido para los parámetros lambda

Esto fue una sorpresa para mí. Curiosamente, dos guiones bajos está bien:

Consumer<Object> c = __ -> {}; // no compile error

Así que no es el carácter de subrayado en general, sino uno solo.

¿Por qué el nombre de un solo guión bajo está específicamente prohibido?


La razón se expresa en este post del propio Brian Goetz :

Estamos "reclamando" el estado real sintáctico de "_" del espacio de identificadores para su uso en futuras características del lenguaje. Sin embargo, debido a que hay programas existentes que podrían usarlo, es una advertencia para los identificadores que aparecen en las posiciones sintácticas existentes para 8, y un error para los formales lambda (ya que no existe un código con lambdas).