_ (подчеркивание) - зарезервированное ключевое слово

Я только что заменил s в следующем выражении лямбда на _:

s -> Integer.parseInt(s)

Компилятор Eclipse говорит:

'_' не следует использовать в качестве идентификатора, так как это зарезервированное ключевое слово с исходного уровня 1.8.

Я не нашел никаких объяснений в JLS §3.9 Лексическая структура/Ключевые слова.

Ответ 1

Место для поиска JLS §15.27.1. Параметры лямбда

Это ошибка времени компиляции, если параметр лямбда имеет имя _ (то есть один символ подчеркивания).

Использование имени переменной _ в любом контексте не рекомендуется. Будущие версии языка программирования Java могут зарезервировать это имя как ключевое слово и/или дать ему специальную семантику.

Таким образом, сообщение Eclipse вводит в заблуждение, тем более что одно и то же сообщение используется для обоих случаев, когда генерируется ошибка для параметра лямбда или когда генерируется предупреждение для любого другого идентификатора _.

Ответ 2

Изменения языка Java для Java SE 9 https://docs.oracle.com/javase/9/language/toc.htm#JSLAN-GUID-16A5183A-DC0D-4A96-B9D8-AAC9671222DD

Из Java 9 символ _ больше не может использоваться как идентификатор, а не только в лямбда-контексте

Символ подчеркивания не является юридическим именем.

Если вы используете символ подчеркивания ( "_" ), ваш исходный код больше не может быть скомпилирован.