为什么单个下划线字符是lambda参数的非法名称?

Boh*_*ian 20 java lambda java-8 underscores

我尝试命名一个lambda参数_,例如(一个减少版本):

Consumer<Object> c = _ -> {};
Run Code Online (Sandbox Code Playgroud)

因为我想表示一个参数被忽略,但我得到了以下编译器错误:

对于lambda参数禁止使用'_'作为标识符

这对我来说是一个惊喜.有趣的是,两个下划线是可以的:

Consumer<Object> c = __ -> {}; // no compile error
Run Code Online (Sandbox Code Playgroud)

因此,它不是一般的下划线字符,而是单个字符.

为什么单下划线名称是专门禁止的?

Boh*_*ian 28

原因在Brian Goetz本人的这篇文章中表达出来:

我们从标识符的空间"回收""_"的句法不动产以用于未来的语言特征.但是,因为现有的程序可能会使用它,所以它是对现有语法位置8中出现的标识符的警告,以及lambda形式的错误(因为没有lambda的现有代码.)