Małe rzeczy zawsze cieszą. Jedną z nich jest możliwość bezproblemowego migrowania z Javy 8 na Javę 9. Fajnie by było, gdyby taka migracja przeszła bez większych zgrzytów, dlatego warto czasami rzucić okiem, co wypluwa nam nasz kompilator.

A wypluć może on na przykład:

Listing 1. Co nam mówi kompilator

Warning:(30,53)java:'_'used as an identifier
		(use of'_'as an identifier might not be supported in releases after Java SE 8)

Co prawda, jeżeli użyjemy podkreślenia jako parametru wyrażenia lambda, to będzie klasycznie fail:

Listing 2. Co nam mówi kompilator w lambdzie

Error:(30,32)java:'_'used as an identifier
		(use of'_'as an identifier is forbidden for lambda parameters)

Jednak warto o tym pamiętać. W czym rzecz. W Javie 8 zaczęto wycofywać znak podkreślenia _ jako prawidłowy identyfikator zmiennej/parametru. Uzasadnienie od Briana Goetza jest takie:

Yes, we are „reclaiming” the syntactic real estate of „_” from the space of
identifiers for use in future language features. However, because there are
existing programs that might use it, it is a warning for identifiers that occur
in existing syntactic positions for 8, and an error for lambda formals (since
there is no existing code with lambdas.)

Your suspicion is mostly right, except that we are certainly NOT going to do
Scala’s „wunderbar”. However, things it might be used for include things like
„I don’t want to give this variable a name” (such as catch parameters that are
never used.)

źródło

Zatem, zanim przejdziemy na Javę 9, to warto przejrzeć swój kod źródłowy pod kątem tego problemu. W szczególności dotyczy to kodu starszego niż Java 8. Tu nie mamy żadnego ostrzeżenia.

Co w zamian?

Znak podkreślenia jest powszechnie stosowany jako marker „do olania”, ale w tej sytuacji nie można go już stosować w Javie. W zamian pozostaje stosowanie podwójnego znaku podkreślenia tzn. __ albo znaku dolara $.