Java 10 带有新的局部变量类型推断。令牌var
可用于减少声明变量时所需的样板文件。例如
var s = "hello";
根据Java 10 中的“var”到底是什么类型的令牌?这个新标记不是“关键字”,而是“保留类型名称”。因此,“var”一词仍然可以用作变量名,以保持与现有代码的向后兼容性。
var var = "you can do this";
当 Java 9 中引入“模块”特性时,这个新标记的类型(连同它的 9 个其他相关标记)被称为“受限关键字”。也就是说,它们仅在某些特定上下文限制下才被视为关键字。例如,您仍然可以拥有称为模块的变量。
当新的语言特性以不破坏现有用户定义符号的方式添加到 C++ 时,它们被称为“上下文敏感关键字”。
var
Java 10 中新的“保留类型名称”标记与“上下文敏感关键字”或“受限关键字”之间是否存在概念差异。也就是说,var
在某些特定上下文的限制下,新令牌实际上不仅仅是一个关键字。如果是这样,为什么不简单地将其添加到“受限关键字”列表中?
为了进一步增加我的困惑, JLS的当前草案版本说:
字符序列 var 通常被视为标识符,但在某些特殊情况下,它就像是关键字一样。
这个定义当然听起来像一个“受限关键字”。