什么是局部变量类型推断是JDK 10

时间:2018-03-27 08:59:12

标签: java java-10

我在java 10中经历了新的features

但是我无法理解什么是局部变量类型推断

有人可以解释一下。

1 个答案:

答案 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