在Java 10中,什么类型的标记完全是“var”?

在上一期Heinz Kabutz的新闻通讯#255 Java 10:推断局部变量中,显示var不是Java 10中的保留字,因为您也可以使用var作为标识符:

public class Java10 {
    var var = 42; // <-- this works
}

然而,你不能使用ie assert作为标识符,就像在var assert = 2 ,因为assert是一个保留字。

正如链接通讯中所述, var不是保留字这一事实是个好消息,因为它允许使用以前的Java版本的代码,它使用var作为标识符在Java 10中编译时没有问题。

那么,什么是var ? 它既不是显式类型也不是语言的保留字,所以它可以是一个标识符,但它在用于在Java 10中声明局部变量时具有特殊含义。我们究竟在一个上下文中称它为什么局部变量声明?

此外,除了支持向后兼容性(允许包含var旧代码作为标识符进行编译)之外, var还不是保留字还有其他好处吗?


根据JEP-286:局部变量类型推断, var

不是关键字; 相反,它是一个保留的类型名称。

(JEP的较早版本留下了实现作为保留类型名称或作为上下文敏感关键字的空间;最终选择了前一个路径。)

因为它不是“保留关键字”,所以仍然可以在变量名称(和包名称)中使用它,但不能在类或接口名称中使用它。

我想不作出的最大原因var保留的关键字与旧的源代码的向后兼容性。


var是保留类型名称var不是关键字,它是保留类型名称。

我们可以创建一个名为“var”的变量。

你可以在这里阅读更多的细节。

var var = 5; // syntactically correct
// var is the name of the variable
“var” as a method name is allowed.

public static void var() { // syntactically correct 
}
“var” as a package name is allowed.

package var; // syntactically correct
“var” cannot be used as the name of a class or interface.
class var{ } // Compile Error
LocalTypeInference.java:45: error: 'var' not allowed here
class var{
      ^
  as of release 10, 'var' is a restricted local variable type and cannot be used for type declarations
1 error

interface var{ } // Compile Error

var author = null; // Null cannot be inferred to a type 
LocalTypeInference.java:47: error: cannot infer type for local variable author
                var author = null;
                    ^
  (variable initializer is 'null')
1 error
链接地址: http://www.djcxy.com/p/17365.html

上一篇: What type of token exactly is "var" in Java 10?

下一篇: define variable with/without var prefix in javascript