29

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

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

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

lambda 参数禁止使用“_”作为标识符

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

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

所以它不是一般的下划线字符,而是一个。

为什么特别禁止使用单下划线名称?

4

1 回答 1

35

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

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

于 2015-12-30T01:31:56.437 回答