還記得Java 16中的instanceof增強嗎?
通過下面這個例子再回憶一下:
Map<String, Object> data = https://www.cnblogs.com/didispace/p/new HashMap<>();
data.put("key1", "aaa");
data.put("key2", 111);
if (data.get("key1") instanceof String s) {
log.info(s);
}
上面這個場景里,Map中的Value值存在不同的型別,所以使用instanceof來判斷取出的value是什么型別,然后根據不同型別來進行處理,那么,接下來繼續思考一個問題,如果這個Map中的Value可能有這幾種型別:String、Integer、Double,我們需要對不同型別分別做不同的處理,是不是處理結構要這樣寫:
if (data.get("key") instanceof String s) {
log.info(s);
} else if (data.get("key") instanceof Double s) {
log.info(s);
} else if (data.get("key") instanceof Integer s) {
log.info(s);
}
面對這樣的if陳述句結構,看著是不是很難受?根據以往的經驗,是不是這個時候想到用switch來改進一下呢?但是再琢磨下,發現這里判斷的時候又用到了instanceof,似乎一下又不好下手了?
于是,在面對這種場景的時候,Java 17對switch做了增強,然后我們就可以這樣來寫:
switch (data.get("key1")) {
case String s -> log.info(s);
case Double d -> log.info(d.toString());
case Integer i -> log.info(i.toString());
default -> log.info("");
}
有沒有一下變得很簡潔呢?
這里的幾個重點值得關注:
case條件中直接涵蓋了型別的判斷和型別的轉換,這個功能類似與Java 16中對instanceof的增強- 每個
case的處理邏輯用Lambda語法來實作,可以免去break陳述句(這是JDK 14新特性:switch運算式增強引入的功能)
另外,要注意的是,對于switch運算式中模式匹配的功能,JDK 17中的實作還是preview版本,所以了解為主,目前還不推薦用于正式環境,不排除后續有進一步改進的可能,
本篇內容對應視頻已完成錄制,點擊查看:Java 17 新特性:switch的模式匹配(Preview)
好了,今天的分享就到這里!如果您學習程序中如遇困難?可以加入我們超高質量的技術交流群,參與交流與討論,更好的學習與進步!另外,不要走開,關注我!持續更新Java新特性專欄!
歡迎關注我的公眾號:程式猿DD,第一時間了解前沿行業訊息、分享深度技術干貨、獲取優質學習資源
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/474770.html
標籤:Java
上一篇:【java并發編程】ReentrantLock 可重入讀寫鎖
下一篇:Spring事務原始碼解讀
