繁体   English   中英

_(下划线)是保留关键字

[英]_ (underscore) is a reserved keyword

我刚刚将以下 lambda 表达式中的s替换为_

s -> Integer.parseInt(s)

Eclipse 编译器说:

'_' 不应用作标识符,因为它是源代码级别 1.8 之后的保留关键字。

我在JLS §3.9词法结构/关键字中没有找到任何解释。

要看的地方是JLS §15.27.1。 Lambda 参数

如果 lambda 参数具有名称 _(即单个下划线字符),则会出现编译时错误。

不鼓励在任何上下文中使用变量名称 _。 Java 编程语言的未来版本可能会将此名称保留为关键字和/或赋予它特殊的语义。

因此 Eclipse 消息具有误导性,尤其是在两种情况下使用相同的消息时,当为 lambda 参数生成错误或为任何其他_标识符生成警告时。

这是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、方法或捕获形式参数。

Java SE 9 的 Java 语言更改https://docs.oracle.com/javase/9​​/language/toc.htm#JSLAN-GUID-16A5183A-DC0D-4A96-B9D8-AAC9671222DD

从 Java 9 开始,_ 字符不能再用作标识符,而不仅仅是在 lambda 上下文中

下划线字符不是合法名称。

如果您使用下划线字符(“_”)作为标识符,您的源代码将无法再编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM