Eu tentei nomear um parâmetro lambda _
, por exemplo (uma versão reduzida):
Consumer c = _ -> {};
como eu queria significar que um parâmetro estava sendo ignorado, mas recebi o seguinte erro do compilador:
o uso de ‘_’ como um identificador é proibido para parâmetros lambda
Isso foi uma surpresa para mim. Curiosamente, dois sublinhados são OK:
Consumer c = __ -> {}; // no compile error
Portanto, não é o caractere de sublinhado em geral, mas um único.
Por que o nome do sublinhado único é especificamente proibido?
A razão é expressa neste post do próprio Brian Goetz :
Estamos “recuperando” o espaço sintático de “_” do espaço de identificadores para uso em futuros resources de linguagem. No entanto, como existem programas que podem usá-lo, é um aviso para identificadores que ocorrem em posições sintáticas existentes para 8 e um erro para formals lambda (já que não há código existente com lambdas).