-2

我正在研究 Java 10 中的新功能

但我不明白什么是局部变量类型推断

有人可以解释一下。

4

1 回答 1

6

现在我们可以写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-in​​ference

于 2018-03-27T09:01:48.900 回答