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