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

时间:2015-12-30 01:30:58

标签: java lambda java-8 underscores

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

Consumer<Object> c = _ -> {};

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

  

对于lambda参数

禁止使用'_'作为标识符

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

Consumer<Object> c = __ -> {}; // no compile error

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

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

1 个答案:

答案 0 :(得分:25)

原因在this post来自Brian Goetz来表达:

  

我们正在&#34;回收&#34; &#34; _&#34;的句法空间来自标识符的空间,用于未来的语言功能。但是,因为有现有的程序可能会使用它,所以它是对现有语法位置8中出现的标识符的警告,以及lambda形式的错误(因为没有lambda的现有代码。)