-->

Why is a single underscore character an illegal na

2019-03-23 19:14发布

问题:

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?

回答1:

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.)