Aub*_*bin 83 java lambda java-8
我刚刚s
在下面的lambda表达式中替换为_
:
s -> Integer.parseInt(s)
Run Code Online (Sandbox Code Playgroud)
Eclipse编译器说:
'_'不应该用作标识符,因为它是源级别1.8的保留关键字.
我没有在JLS§3.9词汇结构/关键词中找到任何解释.
Hol*_*ger 79
如果lambda参数的名称为_(即单个下划线字符),则为编译时错误.
不鼓励在任何上下文中使用变量名_.Java编程语言的未来版本可以将此名称保留为关键字和/或赋予其特殊语义.
因此,Eclipse消息具有误导性,尤其是当为lambda参数生成错误或为任何其他_
标识符生成警告时,两种情况都使用相同的消息.
Ale*_*aux 13
它是JEP 302的第2阶段,它将下划线添加为一个特殊字符,以表示lambda表达式中未使用的参数.
处理下划线
在许多语言中,通常使用下划线(
_
)来表示未命名的lambda参数(类似于方法和异常参数):
BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);
这允许对未使用的参数进行更强的静态检查,并且还允许将多个参数标记为未使用.但是,由于下划线是Java 8中的有效标识符,因此兼容性要求我们采用更加间接的方式来获取下划线可以在Java中为此角色提供服务的位置.第1阶段禁止下划线作为Java 8中的lambda形式参数名称(这没有兼容性结果,因为之前不存在lambdas),并且发出了在其他地方使用下划线作为标识符的警告.第2阶段出现在Java 9中,此警告出现错误.我们现在可以自由地完成下划线的计划修复,以指示未使用的lambda,方法或catch正式参数.
Java SE 9的Java语言更改 https://docs.oracle.com/javase/9/language/toc.htm#JSLAN-GUID-16A5183A-DC0D-4A96-B9D8-AAC9671222DD
从Java 9开始,_字符不能再用作标识符,而不仅仅是在lambda上下文中
下划线字符不是合法名称.
如果使用下划线字符("_")作为标识符,则无法再编译源代码.