I tried naming a lambda parameter _
, e.g. (a cut down version):
Consumer<Object> c = _ -> {};
as I wanted to signify that a parameter was being ignored, but I got the following compiler error:
use of '_' as an identifier is forbidden for lambda parameters
This was a surprise for me. Interestingly, two underscores is OK:
Consumer<Object> c = __ -> {}; // no compile error
So it's not the underscore character in general, but a single one.
Why is the single-underscore name specifically forbidden?
_ (underscore) is a reserved keyword.
Java For TestersIn earlier versions of Java, the underscore ("_") has used as an identifier or to create a variable name. Since Java 9, the underscore character is a reserved keyword and can't be used as an identifier or variable name.
Underscore(_) is a symbol that is used to combine multi-words in a single identifier sometimes refers to a variable in a programming context. In Java, to create a lengthy variable, we prefer to use underscore (_) such as employee_id , employee_name etc.
The reason is expressed in this post from Brian Goetz himself:
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.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With