JDK10 局部变量类型推断(一)
JDK10 Local-Variable Type Inference
想要体验 JDK10 局部变量类型推断,可以选择Eclipse Oxygen或者Intellij IDEA 2018.1.1,但是目前(2018.4.10)来看Eclipse Oxygen官方没有给出原生支持,只能通过插件的方式来体验 Java 10 Support for Oxygen,而且还有部分bug,详情请参考该插件的issue。
Intellij IDEA 2018.1.1版本已经支持JDK10 局部变量推断类型,并且使用方法比较简单,这里使用该IDE进行JDK10
局部变量类型推断的演示。
Intellij IDEA 2018.1.1启用局部变量推断
首先你要安装JDK10,JDK10下载地址。
然后安装完最新版本IDEA之后,新建一个Java Project,进入项目界面之后,选择 Project Structure 。
然后选择已经安装好的 JDK10
在下拉列表中选择 10-Local variable type inference
点击OK之后,就可以体验JDK10 局部变量类型推断的特性了。
特性展示
1. 局部变量类型推断使用的标识符是 var
代码清单 1-1
/**
* Local-Variable Type Inference
*/
public class Main {
public static void main(String[] args) {
var str = "HelloWorld";
System.out.println(str);
}
}
输出结果
HelloWorld
编译器根据局部变量右边的字符串"HelloWorld"
,推断局部变量str
为String
类型。
代码清单 1-2
import java.util.ArrayList;
/**
* Local-Variable Type Inference
*/
public class Main {
public static void main(String[] args) {
var list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.stream().forEach(System.out::println);
}
}
输出结果
1
2
3
编译器根据局部变量右边的ArrayList<Integer>
,推断局部变量list
为ArrayList
类型。
为了说明以下她的优点我们看看JDK10之前的版本是如何声明的
代码清单 1-3
import java.util.ArrayList;
import java.util.List;
/**
* Local-Variable Type Inference
*/
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.stream().forEach(System.out::println);
}
}
输出结果
1
2
3
与代码 1-2 对比,好处是比较明显的她避免的信息的信息冗余,让代码不再那么啰嗦,另外还有一点是对其了变量名,方便程序的阅读,不过这一点可能不是那么重要如果你不在乎的话。
举两个例子:
代码清单 1-4
/**
* Local-Variable Type Inference
*/
public class Main {
public static void main(String[] args) {
ThisIsATestForJDK10LocalVariableTypeInference a = new ThisIsATestForJDK10LocalVariableTypeInference();
var b = new ThisIsATestForJDK10LocalVariableTypeInference();
}
}
class ThisIsATestForJDK10LocalVariableTypeInference {
}
对比以上两种类的定义,效果应该来说是比较明显的。
第二个例子是关于变量名对齐
代码清单 1-5
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* Local-Variable Type Inference
*/
public class Main {
public static void main(String[] args) {
int a = 1;
ArrayList<String> b = new ArrayList<>();
Map<String, Integer> c = new HashMap<>();
String d = "HelloWorld";
var a_1 = 1;
var b_1 = new ArrayList<String>();
var c_1 = new HashMap<String, Integer>();
var d_1 = "HelloWorld";
}
}
对比该类中,上下两种定义方式,应该说第二种方式阅读起来更加方便。(ps:这里的变量声明的命名不规范)
2. 标识符var
是保留字而不是关键字
不能使用var
作为类名,但可以作为变量名,方法名等。
代码清单 1-5
/**
* Local-Variable Type Inference
*/
public class Main {
public static void main(String[] args) {
var var = 10;
}
public void var() {
}
}
未完待续......
To Be Continued......
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。