我尝试命名一个 lambda 参数_
,例如(缩减版):
Consumer<Object> c = _ -> {};
因为我想表明一个参数被忽略了,但是我得到了以下编译器错误:
lambda 参数禁止使用“_”作为标识符
这对我来说是一个惊喜。有趣的是,两个下划线是可以的:
Consumer<Object> c = __ -> {}; // no compile error
所以它不是一般的下划线字符,而是一个。
为什么特别禁止使用单下划线名称?
我尝试命名一个 lambda 参数_
,例如(缩减版):
Consumer<Object> c = _ -> {};
因为我想表明一个参数被忽略了,但是我得到了以下编译器错误:
lambda 参数禁止使用“_”作为标识符
这对我来说是一个惊喜。有趣的是,两个下划线是可以的:
Consumer<Object> c = __ -> {}; // no compile error
所以它不是一般的下划线字符,而是一个。
为什么特别禁止使用单下划线名称?
原因在Brian Goetz本人的这篇文章中表达了:
我们正在从标识符空间中“回收”“_”的句法空间,以用于未来的语言功能。但是,由于存在可能使用它的现有程序,因此对于 8 的现有句法位置中出现的标识符是一个警告,对于 lambda 形式是一个错误(因为没有 lambdas 的现有代码。)