_ (подчеркивание) - зарезервированное ключевое слово
Я только что заменил 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 символ _ больше не может использоваться как идентификатор, а не только в лямбда-контексте
Символ подчеркивания не является юридическим именем.
Если вы используете символ подчеркивания ( "_" ), ваш исходный код больше не может быть скомпилирован.