什么是局部变量类型推断是 JDK 10
What is local-variable type inference is JDK 10
我在 java 10 中经历了新的 features。
但是我不明白什么是局部变量类型推断?
谁能解释一下。
现在我们可以写 var x = new HashMap<String,String>();
而不是更冗长的 Map<String,String> x = new HashMap<String,String> ();
并且关于类型的信息不会重复。它比 Java 7 通用实例创建的类型推断 a.k.a 领先一步。钻石。
只能在方法范围内使用 var
(因此得名:局部变量)并且只能在类型可以是的语句中使用推断(因此后缀:类型推断)。
解析 var
语句,Java 10 编译器从右侧 (RHS) 表达式推断类型。这意味着使用 var
声明的变量需要立即赋值,甚至这个:
var readMe;
readMe = "notAGoodVariableName";
或者这个:
var readMe = null;
不允许。
此外,请注意,由于它使代码不太明确,如果在 var x = getCapitalized('abc')
等语句中使用,它可能会给代码造成混淆 reader。
最后,var
不是关键字,而是保留类型名称。不是 关键字 可确保所有遗留应用程序都不会中断。但是作为 保留类型名称 仍然意味着会有一个断点,遗留应用程序将不得不重命名所有 classes/interfaces ,这些 classes/interfaces 与 完全相同var 同时升级到 Java 10(非常罕见 anti-naming-convention 的情况)。
正确使用它需要遵循一些规则,因此请阅读更多内容:
http://openjdk.java.net/jeps/286
https://developer.oracle.com/java/jdk-10-local-variable-type-inference
我在 java 10 中经历了新的 features。
但是我不明白什么是局部变量类型推断?
谁能解释一下。
现在我们可以写 var x = new HashMap<String,String>();
而不是更冗长的 Map<String,String> x = new HashMap<String,String> ();
并且关于类型的信息不会重复。它比 Java 7 通用实例创建的类型推断 a.k.a 领先一步。钻石。
只能在方法范围内使用 var
(因此得名:局部变量)并且只能在类型可以是的语句中使用推断(因此后缀:类型推断)。
解析 var
语句,Java 10 编译器从右侧 (RHS) 表达式推断类型。这意味着使用 var
声明的变量需要立即赋值,甚至这个:
var readMe;
readMe = "notAGoodVariableName";
或者这个:
var readMe = null;
不允许。
此外,请注意,由于它使代码不太明确,如果在 var x = getCapitalized('abc')
等语句中使用,它可能会给代码造成混淆 reader。
最后,var
不是关键字,而是保留类型名称。不是 关键字 可确保所有遗留应用程序都不会中断。但是作为 保留类型名称 仍然意味着会有一个断点,遗留应用程序将不得不重命名所有 classes/interfaces ,这些 classes/interfaces 与 完全相同var 同时升级到 Java 10(非常罕见 anti-naming-convention 的情况)。
正确使用它需要遵循一些规则,因此请阅读更多内容:
http://openjdk.java.net/jeps/286
https://developer.oracle.com/java/jdk-10-local-variable-type-inference