答案 0 :(得分:5)
现在我们可以编写var x = new HashMap<String,String>();
而不是更详细的Map<String,String> x = new HashMap<String,String> ();
,并且不会复制有关类型的信息。它比通用实例创建的Java 7类型推断领先一步,即a.k.a. diamond。
只能在方法的范围内使用var
(因此名称:局部变量),并且只允许在可以推断类型的语句中使用var
(因此后缀:类型推断)。
解析var
语句,Java 10编译器从右侧(RHS)表达式推断出类型。这意味着需要立即分配使用var readMe;
readMe = "notAGoodVariableName";
声明的变量,甚至是:
var readMe = null;
或者这个:
var x = getCapitalized('abc')
是不允许的。
另外,请注意,因为它使代码不那么明确,如果在var
这样的语句中使用,它可能会为代码阅读器造成混淆。
最后,button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(spinner.getSelectedItem() != null) {
String value = spinner.getSelectedItem().toString();
textView.setText(value );
}
}
});
不是关键字,而是保留类型名称。不是关键字可确保所有遗留应用程序不会中断。但作为保留类型名称仍然意味着会有一个突破点,遗留应用程序必须重命名所有类别/接口,这些类/接口在升级时完全命名为 var Java 10(一种非常罕见的反命名约定案例)。
要正确使用它,需遵循一些规则,因此请阅读以下内容:
http://openjdk.java.net/jeps/286
https://developer.oracle.com/java/jdk-10-local-variable-type-inference