Почему один символ подчеркивания является незаконным именем для параметра лямбда?
Я попробовал присвоить лямбда-параметр _
, например. (сокращенная версия):
Consumer<Object> c = _ -> {};
поскольку я хотел означать, что параметр игнорируется, но я получил следующую ошибку компилятора:
использование '_' в качестве идентификатора запрещено для лямбда-параметров
Это было для меня неожиданностью. Интересно, что два подчеркивания в порядке:
Consumer<Object> c = __ -> {}; // no compile error
Значит, это не символ подчеркивания вообще, а единственный.
Почему однозначное имя запрещено?
Ответы
Ответ 1
Причина выражается в этот пост из Брайан Гетц:
Мы "восстанавливаем" синтаксическую недвижимость "_" из пространства идентификаторов для использования в будущих языковых функциях. Однако, поскольку существуют существующие программы, которые могут его использовать, это предупреждение для идентификаторов, которые встречаются в существующих синтаксических положениях для 8, и ошибка для форматов лямбда (поскольку нет существующего кода с lambdas.)