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

2022-09-01 12:04:45

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

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

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

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

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

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

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

为什么明确禁止使用单下划线名称?


答案 1

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

我们正在从标识符空间中“回收”“_”的语法空间,以用于未来的语言功能。但是,由于存在可能使用它的现有程序,因此对于 8 的现有语法位置中出现的标识符,它是一个警告,对于 lambda 形式是一个错误(因为 lambdas 没有现有代码)。


答案 2

推荐