我尝试命名一个lambda参数_
,例如(缩减版):
Consumer<Object> c = _ -> {};
因为我想表示参数被忽略,但我得到了以下编译器错误:
对于lambda参数
禁止使用'_'作为标识符
这对我来说是一个惊喜。有趣的是,两个下划线是可以的:
Consumer<Object> c = __ -> {}; // no compile error
因此,它不是一般的下划线字符,而是单个字符。
为什么单下划线名称是专门禁止的?
答案 0 :(得分:25)
原因在this post来自Brian Goetz来表达:
我们正在&#34;回收&#34; &#34; _&#34;的句法空间来自标识符的空间,用于未来的语言功能。但是,因为有现有的程序可能会使用它,所以它是对现有语法位置8中出现的标识符的警告,以及lambda形式的错误(因为没有lambda的现有代码。)