Это фаза 2 JEP 302 , которая добавит подчеркивание в качестве специального символа для обозначения неиспользуемых параметров в лямбда-выражениях.
Обработка подчеркивания
Во многих языках часто используется подчеркивание (_
) для обозначения безымянного лямбда-параметра (и аналогично для параметров метода и исключения):
BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);
Это обеспечивает более строгую статическую проверку неиспользуемых аргументов, а также позволяет помечать несколько аргументов как неиспользуемые. Однако, поскольку подчеркивание было допустимым идентификатором начиная с Java 8, совместимость потребовала от нас выбора более косвенного пути, чтобы добраться до того места, где подчеркивание могло бы выполнять эту роль в Java. Фаза 1 запрещала подчеркивание как формальное имя параметра лямбда в Java 8 (это не имело последствий для совместимости, так как лямбда-выражения ранее не существовали), и было выдано предупреждение за использование подчеркивания в качестве идентификатора в других местах. Фаза 2 наступила в Java 9, когда это предупреждение превратилось в ошибку. Теперь мы можем завершить запланированное восстановление подчеркивания, чтобы указать неиспользуемые лямбда, метод или формальный параметр catch.
_
будут запрещены любые допустимые имена идентификаторов, а не только имя лямбда-параметра. Фактически это было исправлено в сборке 43: bugs.openjdk.java.net/browse/JDK-8061549