想要體驗 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
而後選擇已經安裝好的 JDK10
oracle
在下拉列表中選擇 10-Local variable type inference
eclipse
點擊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......