<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          真香 | Java 9-15 新特性總結(jié)

          共 3431字,需瀏覽 7分鐘

           ·

          2021-03-01 23:24

          環(huán)境說明

          • OpenJdk 15

          51a3e0ee7abe02f90f0a763c03449014.webp

          • 開發(fā)工具 IDEA 2020.3.2

          07ea90d29532f251124a7267ae347c68.webp

          var 類型推斷 | since jdk10

          var 是 Java10 版本中新出的特性,用它來定義局部變量。var 不是關(guān)鍵字,相當(dāng)于一種動(dòng)態(tài)類型,編譯器根據(jù)變量所賦的值來推斷類型。所以必須在定義變量的時(shí)候賦初始值。

          ?@Test
          ?public?void?testJDK10VarLocalVariable(){
          ??var?num1?=?1000;
          ??var?num2?=?1.001;
          ??var?str?=?"hello?var";
          ??var?list?=?new?ArrayList<>();
          ??var?map?=?new?HashMap<>();
          ?}

          ?@Test
          ?public?void?testNoramlVariable(){
          ??int?num1?=?1000;
          ??double?num2?=?1.001;
          ??String?str?=?"hello?var";
          ??List?list?=?new?ArrayList<>();
          ??Map?map?=?new?HashMap();
          ?}

          文本塊 | since jdk13

          在我們?nèi)粘5墓ぷ髦校袝r(shí)候需要用到一大段的字符串,這些字符串需要換行,需要排版,需要轉(zhuǎn)義。在一個(gè)文本編輯器中,這當(dāng)然是非常容易的事情。但是在 java 代碼中,就是一個(gè)噩夢(mèng)了。而新的文本塊使用"""這個(gè)符號(hào),進(jìn)行拼接。

          • 簡(jiǎn)化表達(dá)多行字符串,不需要轉(zhuǎn)義;
          • 增強(qiáng)可讀性;
          ?@Test
          ?public?void?testNormalString(){
          ??String?text?=?"{"?+?"\n"
          ????+"????\"username\":?\"lengleng\",\n"
          ????+"????\"password\":?\"123456\"?\n"
          ????+"}";
          ??System.out.println(text);
          ?}

          ?@Test
          ?public?void?testNewJdk13TextBlock(){
          ??var?text?=?"""
          ???????????????{
          ????????????????????"
          username":?"lengleng",
          ????????????????????"
          password":?"123456"
          ???????????????}
          ???????????????"
          "";
          ??System.out.println(text);
          ?}

          switch 表達(dá)式 | since jdk12

          • 如下邏輯,當(dāng)我們需要判斷某天是否是工作日時(shí)候,需要大量的重復(fù)的 case 邏輯
          ?@Test
          ?public?void?testNormalSwitch()?{
          ??int?day?=?2;
          ??switch?(day)?{
          ??case?1:
          ??case?2:
          ??case?3:
          ??case?4:
          ??case?5:
          ???System.out.println("workday");
          ??case?6:
          ??case?7:
          ???System.out.println("weekend");
          ??default:
          ???System.out.println("invalid");
          ??}
          ?}
          • jdk12 可以通過的 switch 表達(dá)式簡(jiǎn)化如上邏輯
          @Test
          ?public?void?testNewJdk12MultiSwitch()?{
          ??var?day?=?2;
          ??switch?(day)?{
          ??case?1,?2,?3,?4,?5?->?System.out.println("workday");
          ??case?6,?7?->?System.out.println("weekend");
          ??default?->?System.out.println("invalid");
          ??}
          ?}

          集合工廠 | since jdk9

          • 通常希望在代碼中創(chuàng)建一個(gè)集合(例如,List 或 Set ),并直接用一些元素填充它。實(shí)例化集合,幾個(gè) “add” 調(diào)用,使得代碼重復(fù)。
          ?@Test
          ?public?void?testNormal(){
          ??List<String>?fruitsTmp?=?new?ArrayList<>();
          ??fruitsTmp.add("apple");
          ??fruitsTmp.add("banana");
          ??fruitsTmp.add("orange");


          ??Map<Integer,?String>?numbersTmp?=?new?HashMap<>();
          ??numbersTmp.put(1,?"one");
          ??numbersTmp.put(2,?"two");
          ??numbersTmp.put(3,?"three");
          ?}
          • 現(xiàn)在可以通過 of 方法來快速構(gòu)建集合類型
          @Test
          ?public?void?testNewJdk9()?{
          ??var?fruits?=?List.of("apple",?"banana",?"orange");
          ??var?numbers?=?Map.of(1,?"one",?2,?"two",?3,?"three");
          ?}

          record 記錄 | since jdk14

          Records 的目標(biāo)是擴(kuò)展 Java 語言語法,Records 為聲明類提供了一種緊湊的語法,用于創(chuàng)建一種類中是“字段,只是字段,除了字段什么都沒有”的類。通過對(duì)類做這樣的聲明,編譯器可以通過自動(dòng)創(chuàng)建所有方法并讓所有字段參與 hashCode()等方法。干掉 lombok 只需要通過 record 聲明即可完成實(shí)體字段的 get 和構(gòu)造器方法。

          public?record?Demo(String?username,?String?password)?{

          }
          ?@Test
          ?public?void?testJdk15Record()?{
          ??var?demo?=?new?Demo("lengleng",?"123456");
          ??System.out.println(demo.password());
          ??System.out.println(demo.username());
          ?}

          接口私有方法 | since jdk9

          Java8 帶來了許多改變,其中之一就是 default 修飾的接口方法。這些方法改變了我們已知的接口,現(xiàn)在我們能夠在接口中定義默認(rèn)實(shí)現(xiàn)方法。如果你大量使用 default 方法在你的應(yīng)用接口中,現(xiàn)在可以通過 JDK9 的接口私有方法來重構(gòu)。

          public?interface?PrivateInterface?{

          ?private?void?printF(){
          ??System.out.println("lengleng");
          ?}

          ?default?void?getPassword(){
          ??printF();
          ??System.out.println("123456");
          ?}
          }
          ?@Test
          ?public?void?testGetPassword()?{
          ??var?privateInterface?=?new?PrivateInterfaceImpl();
          ??privateInterface.getPassword();
          ?}

          Sealed 類封閉 | since jdk15

          可擴(kuò)展性不是面向?qū)ο缶幊痰囊粋€(gè)重要指標(biāo)嗎?為什么要限制可擴(kuò)展性呢?其實(shí),面向?qū)ο缶幊痰淖罴褜?shí)踐之一,就是要把可擴(kuò)展性的限制在可以預(yù)測(cè)和控制的范圍內(nèi),而不是無限的可擴(kuò)展性。

          • 通過 sealed 定義接口或者抽象類
          public?sealed?interface?Pet?permits?Cat?{
          }
          • 分配權(quán)限的子類可以正常的實(shí)現(xiàn)此接口
          public?final?class?Cat?implements?Pet?{
          }
          • 若沒有子類沒有分配權(quán)限,則編譯直接報(bào)錯(cuò)
          0fb70a1fe0d42ea9eee18b43460c46a7.webp

          往期推薦

          產(chǎn)品炸了 | ?微信即將下線模板消息

          RSocket | 替代 REST 的不二選擇

          久等 | Spring Cloud Alibaba 2.2.4 發(fā)布

          2021 首發(fā) | Spring Boot 2.4.2 發(fā)布

          后門 | Nacos 被爆嚴(yán)重安全漏洞


          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色视频网站在线观看免费 | 国产免费一区二区三区四区午夜视频 | 青青草成人社区 | 人人搞人人摸人人看 | 日韩婷婷五月天亚洲黄色视频 |