我正在研究 Java 10 中的新功能。
但我不明白什么是局部变量类型推断?
有人可以解释一下。
现在我们可以写var x = new HashMap<String,String>();
而不是更冗长Map<String,String> x = new HashMap<String,String> ();
,并且关于类型的信息不会重复。它比 Java 7 的泛型实例创建类型推断(又名菱形)领先一步。
var
只能在方法的范围内使用(因此名称为:局部变量),并且仅允许在可以推断类型的语句中使用(因此后缀:类型推断)。
Java 10 编译器解析var
语句,从右侧 (RHS) 表达式推断类型。这意味着使用声明的变量var
需要立即分配,甚至这样:
var readMe;
readMe = "notAGoodVariableName";
或这个:
var readMe = null;
不允许。
另外,请注意,由于它使代码不那么明确,如果在诸如 之类的语句中使用var x = getCapitalized('abc')
,它可能会给代码阅读器造成混淆。
最后,var
不是关键字,而是保留类型名称。不是关键字可确保所有遗留应用程序都不会中断。但是作为保留类型名称仍然意味着会有一个断点,并且遗留应用程序将不得不重命名在升级到 Java 10 时完全命名为var的所有类/接口(一种非常罕见且违反命名约定的情况)。
正确使用它需要遵循一些规则,因此请阅读以下内容:
http://openjdk.java.net/jeps/286
https://developer.oracle.com/java/jdk-10-local-variable-type-inference