日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jep290涉及jdk版本_JDK 14 / JEP 305模式匹配“ Smart Casts”实例

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jep290涉及jdk版本_JDK 14 / JEP 305模式匹配“ Smart Casts”实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jep290涉及jdk版本

我通常將Java代碼中instanceof運算符的存在視為“ 紅色標志 ”,這意味著在某些情況下使用instanceof不一定是錯誤的,但是使用它有時表示可以通過更干凈的方式解決設計問題,如所述本文結尾處引用的一些資源中的內容(包括有關Java以外語言的類似類型檢查功能的資源)。

盡管我已經看到instanceof不需要使用多次,但我遇到了更多情況,要避免instanceof并不容易。 當使用遺留代碼庫以及某些庫和框架時,尤其如此,在這些庫和框架中,我無法重構類之間的關系以支持接口,方法重寫以及可用于消除對instanceof需求的其他策略。

與使用的一個非常普通的技術instanceof是立即強制轉換為類型在有條件使用檢查instanceof 。 JEP 305 [“針對instanceof(預覽)的模式匹配”]提供了這種常見模式的示例,在這里我略微修改了該示例:

if (object instanceof String) { final String string = (String) object; // Do something with the 'string' variable typed as String }

本杰·韋伯(Benji Weber )發布了有關使用反射和使用lambda表達式來實現類似Kotlin的 “智能轉換實例”的文章。 幸運的是, JDK 14和JEP 305為這種方法帶來了內置的語言支持(盡管處于預覽狀態)。

JDK 14引入了預覽功能 ,該功能允許在條件內完全實現條件和instanceof 。 接下來顯示對以上代碼示例的影響:

if (object instanceof String string) { // Do something with the 'string' variable typed as String }

此預覽功能在JDK 14 Early Access Builds中可用,而我在本文中的示例中使用的是JDK 14 Early Access Build 34 。

JDK 14中的JEP 305預覽功能是一個很小的優點, if - then - else條件語句, then其優勢在冗長的時間中更加明顯。 接下來的兩個代碼清單提供了對調用instanceof的“舊方法”和顯式轉換為使用instanceof 模式匹配的“新預覽方法”的比較。

傳統instanceof結合顯式cast

static void makeAnimalNoises( final Object animal) { if (animal Dog) (animal instanceof Dog) { final Dog dog = (Dog) animal; out.println(dog.bark()); } else if (animal Cat) (animal instanceof Cat) { final Cat cat = (Cat) animal; out.println(cat.meow()); } else if (animal Duck) (animal instanceof Duck) { final Duck duck = (Duck) animal; out.println(duck.quack()); } else if (animal Horse) (animal instanceof Horse) { final Horse horse = (Horse) animal; out.println(horse.neigh()); } else if (animal Cow) (animal instanceof Cow) { final Cow cow = (Cow) animal; out.println(cow.moo()); } else if (animal instanceof Lion) { final Lion lion = (Lion) animal; out.println(lion.roar()); } else { out.println( "ERROR: Unexpected animal: " + animal); } }

JDK 14 / JEP 305預覽功能

static void makeAnimalNoises( final Object animal) { if (animal Dog dog) (animal instanceof Dog dog) { out.println(dog.bark()); } else if (animal Cat cat) (animal instanceof Cat cat) { out.println(cat.meow()); } else if (animal Duck duck) (animal instanceof Duck duck) { out.println(duck.quack()); } else if (animal Horse horse) (animal instanceof Horse horse) { out.println(horse.neigh()); } else if (animal Cow cow) (animal instanceof Cow cow) { out.println(cow.moo()); } else if (animal Lion lion) (animal instanceof Lion lion) { out.println(lion.roar()); } else { out.println( "ERROR: Unexpected animal: " + animal); } }

完整的代碼在GitHub上,并且可以使用舊方法和新預覽方法之間的區別 。

由于instanceof模式匹配是預覽功能,因此使用此功能的代碼必須使用javac標志--enable-preview和-source 14進行編譯。 它必須使用java標志--enable-preview 。

結論

有關如何實現此功能的更多詳細信息,請參閱“ RFR:JDK-8237528:instanceof的Pattern Matching效率低下的編譯 ”一文。 instanceof 模式匹配支持是Amber向Java減少樣板代碼提供的又一步。

有關使用instanceof問題的資源

  • Java'instanceOf':為什么以及如何在代碼中避免使用它
  • 您真的需要instanceof嗎?
  • 在Java中使用instanceof是否考慮是不好的做法?
  • 使用Instanceof主要是代碼異味
  • 有條件的Instanceof:代碼氣味
  • 當心操作符的instanceof
  • “ instanceof”有多邪惡?
  • 類型檢查是代碼異味

翻譯自: https://www.javacodegeeks.com/2020/02/jdk-14-jep-305-instanceof-pattern-matching-smart-casts.html

jep290涉及jdk版本

總結

以上是生活随笔為你收集整理的jep290涉及jdk版本_JDK 14 / JEP 305模式匹配“ Smart Casts”实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。