玩JDK 12的Switch表达式
在博客文章“操作中的JDK語言功能預(yù)覽:切換表達式 ”中,我討論了JEP 325 [“切換表達式( 預(yù)覽 )”)如何作為指定的“ 預(yù)覽語言功能 ”的早期應(yīng)用,如JEP 12所述。預(yù)覽語言和VM功能”]。 JEP 325 適用于JDK 12 。 更好的是, JDK 12的搶先體驗版已經(jīng)提供了對該預(yù)覽語言功能的支持!
正如我以前的博客文章“ Switch Expressions Coming to Java? ”中所展示的那樣,我對與switch表達式相關(guān)的可能性感到很興奮。 ”,“ 通過引入switch表達式來增強Java switch語句 ”以及前面提到的“ JDK語言功能預(yù)覽:Switch表達式” 。 JDK 12 Early Access Builds使得開始嘗試使用此預(yù)覽語言功能變得非常容易,我將使用JDK 12 Early Access Build 10(2018/9/6) [本文撰寫時的最新版本]進行演示。
我將花費大量精力來準(zhǔn)備JEP 325本身(在“描述”部分的早期)中提供的其中一個示例,而不是花任何額外的精力來提出我自己的開關(guān)表達式的創(chuàng)意示例。 此示例實際上是增強的switch 語句,而不是switch 表達式 ,但是它需要相同的語言預(yù)覽支持,并且是該功能的一部分。 接下來顯示該修改示例的代碼清單。
package dustin.examples.jdk12.switchexp;public class SwitchExpressionsDemo {/*** This example is adopted from the JEP 325 text* (http://openjdk.java.net/jeps/325).** @param k Value to be switched upon.*/static void howMany(final int k){switch (k){case 1 -> System.out.println("one");case 2 -> System.out.println("two");case 3 -> System.out.println("many");}}/*** Execute demonstration discussed in JEP 325 using custom* method {@link #howMany(int)}.*/public static void demonstrateHowMany(){howMany(1);howMany(2);howMany(3);}public static void main(final String[] arguments){demonstrateHowMany();} }當(dāng)我嘗試使用不帶任何特殊標(biāo)志的JDK 12 javac編譯器編譯以上代碼時,我看到錯誤消息:“錯誤:切換規(guī)則是預(yù)覽功能,默認情況下處于禁用狀態(tài)。” 該錯誤消息還提供了有用的提示:“(使用--enable-preview啟用切換規(guī)則)”。
將--enable-preview標(biāo)志傳遞給JDK 12 javac編譯器使我克服了剛剛顯示的錯誤,但是隨后提醒我,-- --enable-preview標(biāo)志應(yīng)與-source標(biāo)志或--release標(biāo)志。 錯誤消息明確指出:“錯誤: --enable-preview --release --enable-preview必須與-source或--release一起使用。
我選擇將--release 12標(biāo)志與--enable-preview結(jié)合使用,并允許編譯增強的switch語句演示示例。
增強的switch語句示例使用傳遞給JDK 12 javac編譯器的--enable-preview和--release 12選項進行編譯,但是如最后一個屏幕快照中的輸出所示,有一條消息指出已編譯的類“使用預(yù)覽語言功能”,并建議“使用-Xlint:preview重新編譯以獲取詳細信息”。 下一個屏幕快照演示了指定-Xlint:preview的結(jié)果:
在編譯開關(guān)表達式演示示例時,將-Xlint:preview標(biāo)志傳遞給JDK 12 javac編譯器時,導(dǎo)致使用開關(guān)表達式( ->語法)指向指向特定代碼行的三條警告消息,并指出“警告:[preview]切換規(guī)則是一種預(yù)覽功能,在將來的版本中可能會刪除。”
通過增強的switch語句代碼編譯,現(xiàn)在可以嘗試運行該代碼了。 如果在沒有任何標(biāo)志指示使用預(yù)覽功能的情況下調(diào)用JDK 12 java啟動器,則會顯示錯誤消息:“ java.lang.UnsupportedClassVersionError:未啟用預(yù)覽功能……嘗試使用'-enable-preview'運行。”
當(dāng)--enable-preview傳遞給JDK 12 java啟動器時,演示將成功運行,如下一個屏幕快照所示。
將最后一個屏幕快照中顯示的輸出與本文開頭闡述的增強的switch語句演示的源代碼進行比較時,可以快速地進行一些觀察。 也許最引人注目的是,有沒有break的例子說明,但沒有落空發(fā)生盡管沒有break的陳述。 這正是開關(guān)表達式和增強型開關(guān)語句應(yīng)發(fā)生的JEP 325狀態(tài):“如果匹配了標(biāo)簽,則僅執(zhí)行箭頭標(biāo)簽右側(cè)的表達式或語句;否則,僅執(zhí)行箭頭標(biāo)簽右側(cè)的表達式或語句。 沒有失敗。” “箭頭”(->)的存在表示我們正在使用switch表達式或增強型switch語句,其中表達式或語句將完全由“ arrow”右邊的內(nèi)容來解析(因此,沒有明顯的break是需要)。 在switch表達式或增強的switch語句中帶有“分號”(而不是“箭頭”)和相關(guān)的break的出現(xiàn)允許指定多行。
還有更多與開關(guān)表達式和增強型switch語句有關(guān)的內(nèi)容,并可以進行嘗試。 但是,本文著重介紹了JDK 12早期訪問版本中開關(guān)表達式的可用性和增強的開關(guān)語句支持,并提供了該支持的簡單示例。 開始使用Java開關(guān)表達式和增強的開關(guān)語句非常令人興奮! 考慮一個沒有切換失敗的世界也是令人興奮的! 這只是JDK 12的“預(yù)覽”功能,但是我很期待切換失敗的開始。
翻譯自: https://www.javacodegeeks.com/2018/09/playing-with-jdk-12s-switch-expressions.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的玩JDK 12的Switch表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 整个电脑桌面的疯狂弹窗电脑突然疯狂弹窗
- 下一篇: 如何从云功能调用外部REST API