Подтвердить что ты не робот

Почему один символ подчеркивания является незаконным именем для параметра лямбда?

Я попробовал присвоить лямбда-параметр _, например. (сокращенная версия):

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

поскольку я хотел означать, что параметр игнорируется, но я получил следующую ошибку компилятора:

использование '_' в качестве идентификатора запрещено для лямбда-параметров

Это было для меня неожиданностью. Интересно, что два подчеркивания в порядке:

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

Значит, это не символ подчеркивания вообще, а единственный.

Почему однозначное имя запрещено?

4b9b3361

Ответ 1

Причина выражается в этот пост из Брайан Гетц:

Мы "восстанавливаем" синтаксическую недвижимость "_" из пространства идентификаторов для использования в будущих языковых функциях. Однако, поскольку существуют существующие программы, которые могут его использовать, это предупреждение для идентификаторов, которые встречаются в существующих синтаксических положениях для 8, и ошибка для форматов лямбда (поскольку нет существующего кода с lambdas.)