É a Fase 2 do JEP 302 , que vai adicionar o sublinhado como um caractere especial para denotar parâmetros não utilizados em expressões lambda.
Tratamento de sublinhados
Em muitas linguagens, é comum usar um sublinhado ( _
) para denotar um parâmetro lambda sem nome (e da mesma forma para parâmetros de método e exceção):
BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);
Isso permite uma verificação estática mais forte de argumentos não usados e também permite que vários argumentos sejam marcados como não usados. No entanto, como o sublinhado era um identificador válido no Java 8, a compatibilidade exigia que adotássemos um caminho mais indireto para chegar onde o sublinhado poderia servir a essa função em Java. A fase 1 estava proibindo o sublinhado como um nome de parâmetro formal lambda no Java 8 (isso não tinha nenhuma consequência de compatibilidade, já que lambdas não existiam anteriormente) e um aviso foi emitido para usar o sublinhado como um identificador em outros lugares. A fase 2 veio no Java 9, quando esse aviso se tornou um erro. Agora estamos livres para concluir a reabilitação planejada de sublinhado para indicar um lambda, método ou parâmetro formal de captura não utilizado.
_
não será permitido qualquer nome de identificador legal e não apenas um nome de parâmetro lambda. Na verdade, isso foi corrigido na versão 43: bugs.openjdk.java.net/browse/JDK-8061549