前些天 JDK 14 發佈了:
重磅:Java 14 正式發佈了!html
今天棧長帶你們來嚐嚐 Java14 的鮮,雖然你們都在用着 Java8 或者如下版本,但多學習瞭解一點總不是壞事。java
好比出去面試啥的,面試官總會問你在學什麼新技術,多學習下新知識能夠出去和麪試官吹水了。若是面試官會,你不會,那你不就 OUT 了!面試
首先打開 JDK14 的下載地址:編程
https://www.oracle.com/java/t...
選擇對應系統的版本安裝。後端
安裝細節就不展開了,相信你們都會,我這裏已經裝好了,來看下 JDK 版本。安全
$ java -version java version "14" 2020-03-17 Java(TM) SE Runtime Environment (build 14+36-1461) Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
Java14 is ready, let's go!!微信
instanceof模式匹配,至關於加強的 instanceof,這目前仍是 JDK 14 中的預覽特性:多線程
https://openjdk.java.net/jeps...
模式匹配的到來將使得 instanceof 變得更簡潔、更安全,爲何這麼說,繼續往下看。架構
在 Java 14 以前,咱們判斷一個對象是不是某個類派生的實例,是這樣使用 instanceof
的:oracle
if (object instanceof Kid) { Kid kid = (Kid) object; // ... }
以上程序作了三件事:
1)判斷 object 是不是 Kid 的實例
2)把 object 強制轉換爲 Kid 類型
3)建立了一個局部變量:kid
雖然這段程序很簡單,你們也都是這麼用的,並無什麼問題。
但這不是最佳的編寫方式,判斷完以後爲何還要進行一次類型強轉?這應該不是必需的,並且強轉的時候可能類型出錯。
假如,我如今想加一個判斷是否是 Kiddle 的實例:
if (object instanceof Kid) { Kid kid = (Kid) object; // ... } else if (object instanceof Kiddle) { Kid kid = (Kid) object; // ... }
這時候類型判斷完後忘了修改 Kid -> Kiddle,結果仍是強轉給 Kid,這時候有兩種結果:
1)Kiddle 是 Kid 的子類,不報錯
2)Kiddle 不是 Kid 的子類,報錯
心態是否是要崩了?
無論怎樣,這程序是不健壯了,這確實不是很好的體驗,模式匹配就能夠避免這種問題的出現。模式匹配其實不少語言已經有了,Java 來得比較晚,但總歸是來了,來看下模式匹配該怎麼寫!
if (object instanceof Kid kid) { // ... } else if (object instanceof Kiddle kiddle) { // ... }
是否是看起來很爽?判斷完類型後能夠直接拿來用!
模式匹配其實就是對判斷類型進行匹配,匹配成功後就把對象強轉賦值給類型後面的變量。
注意,這個變量只有在匹配成功後纔會建立和賦值,並且做用域僅只能在當前判斷分支裏面,若是用在分支外會出現編譯錯誤。
另外,回到最開始的程序,若是同時出現不少個 instanceof 判斷:
if (object instanceof Kid1) { Kid1 kid1 = (Kid1) object; // ... } else if (object instanceof Kid2) { Kid2 kid2 = (Kid2) object; // ... } else if (object instanceof Kid3) { Kid3 kid3 = (Kid3) object; // ... } else if (object instanceof Kid4) { Kid4 kid4 = (Kid4) object; // ... } else if (object instanceof Kid5) { Kid5 kid5 = (Kid5) object; // ... } else if (object instanceof Kid6) { Kid6 kid6 = (Kid6) object; // ... } else if (object instanceof Kid7) { Kid7 kid7 = (Kid7) object; // ... } else if (object instanceof Kid8) { Kid8 kid8 = (Kid8) object; // ... }
大量的類型轉換,這程序會變得有多冗長??
因此,模式匹配不但提升了程序的安全性、健壯性,另外一方面,也減小了大量沒必要要的類型轉換,大大提升了程序的簡潔性、可讀性。
另外,switch
在 Java 12 中增強了:Java 12 騷操做, String竟然還能這樣玩!。若是可使用 switch
一塊兒結合使用,那該多好?這是之後計劃的事了。
instanceof模式匹配這真是 Java 中的又一能力的提高,我的以爲很實用,不會以爲它多餘或者像 Java8 中的 Lambda
、函數式編程晦澀難懂。
好了,今天就到這了,關注微信公衆號:Java技術棧,新特性實戰陸續更新中,公衆號第一時間推送。歷史 Java 8 - 14 新特性教程能夠在公衆號回覆 java 獲取。
棧長原創和整理不易,以爲文章不錯,在看、轉發分享給更多的朋友們,總能幫助有須要的人,你們一塊兒流弊~
推薦去個人博客閱讀更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
生活很美好,明天見~