想要体验 JDK10 局部变量类型推断,能够选择Eclipse Oxygen或者Intellij IDEA 2018.1.1,可是目前(2018.4.10)来看Eclipse Oxygen官方没有给出原生支持,只能经过插件的方式来体验 Java 10 Support for Oxygen,并且还有部分bug,详情请参考该插件的issue。html
Intellij IDEA 2018.1.1版本已经支持JDK10 局部变量推断类型,而且使用方法比较简单,这里使用该IDE进行JDK10
局部变量类型推断的演示。java
首先你要安装JDK10,JDK10下载地址。
而后安装完最新版本IDEA以后,新建一个Java Project,进入项目界面以后,选择 Project Structure 。windows
而后选择已经安装好的 JDK10oracle
在下拉列表中选择 10-Local variable type inferenceeclipse
点击OK以后,就能够体验JDK10 局部变量类型推断的特性了。ide
var
代码清单 1-1idea
/** * Local-Variable Type Inference */ public class Main { public static void main(String[] args) { var str = "HelloWorld"; System.out.println(str); } }
输出结果spa
HelloWorld
编译器根据局部变量右边的字符串"HelloWorld"
,推断局部变量str
为String
类型。.net
代码清单 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:这里的变量声明的命名不规范)
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......