Jest to faza 2 JEP 302 , która doda podkreślenie jako znak specjalny oznaczający nieużywane parametry w wyrażeniach lambda.
Traktowanie podkreśleń
W wielu językach często używa się znaku podkreślenia ( _
) do oznaczenia nienazwanego parametru lambda (i podobnie dla parametrów metody i wyjątku):
BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);
Umożliwia to silniejsze statyczne sprawdzanie nieużywanych argumentów, a także umożliwia oznaczanie wielu argumentów jako nieużywanych. Jednakże, ponieważ podkreślenie było poprawnym identyfikatorem w Javie 8, kompatybilność wymagała od nas obrania bardziej pośredniej ścieżki do miejsca, w którym podkreślenie mogłoby pełnić tę rolę w Javie. Faza 1 zabraniała podkreślenia jako formalnej nazwy parametru lambda w Javie 8 (nie miało to konsekwencji dla zgodności, ponieważ lambdy wcześniej nie istniały) i wydano ostrzeżenie o używaniu podkreślenia jako identyfikatora w innych miejscach. Faza 2 pojawiła się w Javie 9, kiedy to ostrzeżenie stało się błędem. Możemy teraz zakończyć planowaną naprawę podkreślenia, aby wskazać nieużywaną lambdę, metodę lub parametr formalny catch.
_
nie będzie dozwolone jako jakiekolwiek legalne nazwy identyfikatorów, a nie tylko jako nazwa parametru lambda. Naprawiono to w kompilacji 43: bugs.openjdk.java.net/browse/JDK-8061549