国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

不要錯過的六個優秀Java新功能

譯文
開發 后端
程序開發人員如今跟上Java頻繁發布功能的節奏并不容易。如果錯過了密封類、文本塊、記錄類、新字符串方法以及可選類,則需要修復或彌補這些功能。

[[427316]]

【51CTO.com快譯】隨著采用新的發布節奏,Java在2018年悄然經歷了其開發過程中最大的變化之一。而這個大膽的新計劃導致Java的開發人員每六個月發布一個新功能。

這有利于保持Java的新鮮度和相關性,但它很容易讓開發人員錯過引入的功能。本文匯總了幾個有用的新功能并對其進行概述。

1.可選類(Optional class)

空指針異常是所有錯誤中最經典的錯誤之一。雖然開發人員可能很熟悉這個問題,但它的處理過程非常冗長,需要加以防范。至少在Java 8(以及Java 10改進)引入可選類之前是這樣。

本質上,可選類允許包裝一個變量,然后使用包裝器的方法更簡潔地處理空值。

清單1有一個多樣性空指針錯誤的示例,其中的可選類引用foo為空(null),并且在其上訪問了一個方法foo.getName()。

清單1.沒有可選類的空指針

  1. public class MyClass { 
  2.     public static void main(String args[]) { 
  3.       InnerClass foo = null
  4.       System.out.println("foo = " + foo.getName()); 
  5.     } 
  6. class InnerClass { 
  7.   String name = ""
  8.   public String getName(){ 
  9.       return this.name
  10.   } 

可選類提供了多種處理此類情況的方法,具體取決于開發人員的需要。它運行一個isPresent()方法,開發人員可以使用它來進行if檢查。然而這個過程可能相當冗長。但是可選類也有函數處理的方法。例如,清單2展示了如何使用ifPresent()——注意與isPresent()的一個字母差異,只有當存在數值時才運行輸出代碼。

清單2.只有當存在數值時運行代碼

  1. import java.util.Optional; 
  2. public class MyClass { 
  3.     public static void main(String args[]) { 
  4.       InnerClass foo = null; //new InnerClass("Test"); 
  5.       Optional fooWrapper = Optional.ofNullable(foo); 
  6.       fooWrapper.ifPresent(x -> System.out.println("foo = " + x.getName())); 
  7.       //System.out.println("foo = " + fooWrapper.orElseThrow()); 
  8.     } 
  9. class InnerClass { 
  10.   String name = ""
  11.   public InnerClass(String name){ 
  12.       this.name = name
  13.   } 
  14.   public String getName(){ 
  15.       return this.name
  16.   } 

提示:當使用可選類時,如果使用orElse()方法通過方法調用提供默認值,需要考慮如果該值是非空的話,使用orElseGet()來提供函數引用,以獲得不運行調用的性能優勢。

2.記錄類(預覽功能)

構建Java應用程序的一個常見需求是所謂的不可變DTO(數據傳輸對象)。DTO用于對來自數據庫、文件系統和其他數據存儲的數據進行建模。傳統上,DTO是通過創建一個類來創建的,該類的成員通過構造函數設置,沒有getter方法來訪問它們。Java 14引入并改進了Java 15,新的記錄關鍵字為此目的提供了速記。

清單3說明了引入記錄類型之前的典型DTO定義和用法。

清單3.一種簡單的不可變DTO

  1. public class MyClass { 
  2.     public static void main(String args[]) { 
  3.       Pet myPet = new Pet("Sheba", 10); 
  4.  
  5.       System.out.println(String.format("My pet %s is aged %s", myPet.getName(), myPet.getAge())); 
  6.     } 
  7. class Pet { 
  8.     String name
  9.     Integer age; 
  10.     public Pet(String nameInteger age){ 
  11.         this.name = name
  12.         this.age = age; 
  13.     } 
  14.     public String getName(){ 
  15.         return this.name
  16.     } 
  17.     public Integer getAge(){ 
  18.         return this.age; 
  19.     } 

可以使用記錄關鍵字消除大部分樣板文件,如清單4所示。

清單4.使用記錄關鍵字

  1. public class MyClass { 
  2.     public static void main(String args[]) { 
  3.       Pet myPet = new Pet("Sheba", 10); 
  4.  
  5.       System.out.println(String.format("My pet %s is aged %s", myPet.getName(), myPet.getAge())); 
  6.     } 
  7.  
  8. public record Pet(String nameInteger age) {} 

需要注意的是,使用數據對象的客戶端代碼沒有改變;它的行為就像一個傳統定義的對象。記錄關鍵字足夠智能,可以通過簡單的定義足跡推斷出存在哪些字段。

記錄類還定義了equals()、hashCode()和toString()的默認實現,同時還允許開發人員覆蓋這些實現。開發人員還可以提供自定義構造函數。

需要注意的是,記錄不能被子類化。

3.新字符串方法

在Java 10和Java 12中,添加了幾個有用的新字符串方法。除了字符串操作方法之外,還引入了兩種用于簡化文本文件訪問的新方法。

Java 10中的新字符串方法:

  • isBlank():如果字符串為空或字符串僅包含空格(包括制表符),則返回true。注意isBlank()與isEmpty()不同,后者僅在length為0時返回true。
  • lines():將字符串拆分為字符串流,每個字符串包含一行。每行由/r或/n或/r/n定義。例如,參見清單5。
  • strip()、stripLeading()、stripTrailing():分別從開頭和結尾、僅開頭和僅結尾刪除空格。
  • repeat(in ttimes):返回一個字符串,該字符串采用原始字符串并重復指定的次數。
  • readString():允許從文件路徑直接讀取字符串,如清單6所示。
  • writeString(Path path):將字符串直接寫入指定路徑的文件中。

Java 12中的新字符串方法:

  • indent(int level):將字符串縮進指定的數量。負值只會影響前導空格。
  • transform(Function f):將給定的lambda應用于字符串。

清單5. String.lines() 示例

  1. import java.io.IOException; 
  2. import java.util.stream.Stream; 
  3. public class MyClass { 
  4.     public static void main(String args[]) throws IOException{ 
  5.       String str = "test \ntest2 \n\rtest3 \r"
  6.       Stream lines = str.lines(); 
  7.       lines.forEach(System.out::println); 
  8.     } 
  9.  
  10. /* 
  11. outputs: 
  12. test 
  13. test2 
  14. test3 
  15. */ 

清單6.String.readString(Path path)示例

  1. Path path = Path.of("myFile.txt");  
  2. String text = Files.readString(path); 
  3. System.out.println(text); 

4.Switch表達式

Java 12引入了Switch表達式,它允許在語句中內聯使用Switch。換句話說,Switch表達式返回一個值。Java 12還提供了一種箭頭語法,無需顯式中斷即可防止失敗。Java 13則更進一步改進,引入了yield關鍵字來明確表示Switch case返回的值。Java 14采用了新的Switch表達式語法作為完整功能。

讓我們看一些例子。首先,清單7有一個傳統格式(Java 8)的Switch語句示例。此代碼使用變量(消息)輸出已知數字的名稱。

清單7.傳統Java Switch

  1. class Main {  
  2.   public static void main(String args[]) { 
  3.     int size = 3; 
  4.     String message = ""
  5.  
  6. switch (size){ 
  7.  case 1 : 
  8. message = "one"
  9.  case 3 : 
  10.    message = "three"
  11. break; 
  12.  default : 
  13. message = "unknown"
  14. break; 
  15.  
  16. System.out.println("The number is " + message); 
  17.   } 

現在這段代碼非常冗長并且挑剔。其實里面已經有了錯誤,開發人員需要仔細查找丟失的內容。清單8通過使用新Switch表達式進行了簡化。

清單8. 新的Switch表達式

  1. class NewSwitch {  
  2.   public static void main(String args[]) { 
  3.     int size = 3; 
  4.  
  5.     System.out.println("The number is " + 
  6.       switch (size) { 
  7.         case 1 -> "one"
  8.         case 3 -> "three"
  9.         default -> "unknown"
  10.       } 
  11.     ); 
  12.   } 

在清單8中,可以看到Switch表達式就在System.out.println調用中。這已經是一個很大的可讀性勝利,并且消除了多余的消息變量。此外,箭頭語法通過消除break語句減少了代碼占用空間。(不使用箭頭語法時使用yield關鍵字。)

5.文本塊

Java 13通過引入文本塊解決了在Java中處理復雜文本字符串的長期困擾。Java 14改進了這種支持。

JSON、XML和SQL之類的東西可能會讓開發人員過多地使用多個嵌套的轉義層。正如規范解釋的那樣:“在Java中,在字符串文字中嵌入HTML、XML、SQL或JSON的片段……通常需要使用轉義和連接進行大量編輯,然后才能編譯包含該片段的代碼。該代碼段通常難以閱讀且難以維護。”

在清單9中,新的文本塊語法用于創建JSON片段。

清單9.使用文本塊的JSON

  1. class TextBlock {  
  2.   public static void main(String args[]) { 
  3.     String json = ""
  4.       { 
  5.         "animal" : "Quokka"
  6.         "link" : "https://en.wikipedia.org/wiki/Quokka" 
  7.       } 
  8.     """; 
  9.  
  10.     System.out.println(json); 
  11.   } 

在清單9中看不到轉義字符。此外,還要注意三重雙引號語法。

6.密封類

Java 15(JEP 260)引入了密封類的概念。簡而言之,新的sealed關鍵字允許開發人員定義哪些類可以對接口進行子類化。在這種情況下,示例勝過千言萬語。參見清單10。

清單10.密封類示例

  1. public abstract sealed class Pet 
  2.     permits Cat, Dog, Quokka {...} 

界面設計者在這里使用了sealed關鍵字來指定允許哪些類擴展Pet類。

總的來說,很明顯,Java發布功能的新方法正在奏效。人們看到許多新想法通過JEP(JDK增強提案)過程轉化為實際可用的Java功能。這對Java開發人員來說是一個好消息。這意味著他們正在使用一種充滿活力、不斷發展的語言和平臺。

原文標題:6 great new Java features you don’t want to miss,作者:Matthew Tyson

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:華軒 來源: 51CTO
相關推薦

2024-03-11 14:34:04

JavaScript開發

2013-05-31 15:57:59

Windows 8.1

2021-07-19 10:06:30

數據治理數字化轉型CIO

2020-07-24 00:41:18

物聯網項目物聯網IOT

2023-06-05 11:26:23

2023-07-18 15:11:01

2021-08-07 09:32:23

數據治理數字化轉型CIO

2023-10-16 22:44:06

2022-07-27 08:34:13

Vim插件

2020-03-16 08:00:00

物聯網項目物聯網IOT

2020-08-18 11:21:28

數據挖掘機器學習算法

2023-08-21 13:39:57

開發桌面Ubuntu

2022-02-08 13:34:22

數據分析師定基線

2023-03-02 11:51:00

數據分析師企業

2022-07-03 08:14:30

VS Code主題

2021-10-25 22:29:36

微信功能技巧

2022-07-29 15:28:45

人工智能Python框架

2025-04-11 11:55:49

2025-09-15 02:55:00

2024-04-15 12:27:00

await面試接口
點贊
收藏

51CTO技術棧公眾號

a'aaa级片在线观看| av高清资源| 久久精品凹凸全集| 一区二区三区高清在线| 97人人模人人爽人人喊38tv| 美女搞黄视频在线观看| 综合中文字幕亚洲| 亚洲精品免费一区二区三区| а√天堂在线官网| 久久综合视频网| 国新精品乱码一区二区三区18| 美国一级片在线免费观看视频| 久久中文字幕av一区二区不卡| 日韩欧美精品一区二区三区| 黄色亚洲免费| 色黄久久久久久| 成人免费在线观看网站| 免费日韩视频| 日本一区二区高清视频| 狠狠入ady亚洲精品| 欧美成人免费在线观看| 成人一级福利| 一区二区三区日韩精品视频| 亚洲免费久久| 激情六月婷婷久久| 国产精品一国产精品最新章节| 韩国成人漫画| 捆绑调教一区二区三区| 国产欧美一区二区三区不卡高清| 免费福利视频一区| 成人免费观看a| 国产精品久久久亚洲一区| 国产高清不卡av| 国产ts人妖一区二区| 精品国产一区二区三区麻豆小说 | 色94色欧美sute亚洲线路一ni| 91精品啪在线观看国产60岁| 正在播放日韩精品| 欧美在线亚洲一区| 亚洲一区二区伦理| 黄色三级视频在线| 日本道色综合久久| 成年人视频免费在线播放| 国产精品久久久久久久久久免费| 伊人影院久久| 欧美一级电影在线| 天然素人一区二区视频| 亚洲黄色在线观看| 婷婷综合福利| 精品乱子伦一区二区三区| 亚洲免费资源在线播放| 成人福利一区二区| 日韩av电影国产| 日韩国产在线一| www.av在线播放| 国产日韩在线免费| 日本成人中文字幕在线视频| 在线播放中文字幕| 色婷婷综合五月| www.涩涩涩| 亚洲资源av| 91精品国产一区二区三区香蕉| av成人观看| 日韩精品一区二区三区免费观影 | 2019日本中文字幕| 毛片av一区二区| 欧美xxxbbb| 欧美久久久久久| 精品久久久久一区二区国产| 在线成人h网| 国产美女精品在线观看| 一区二区三区加勒比av| 蜜桃在线一区| 国产精品无码免费专区午夜| 欧美性猛片xxxx免费看久爱| 欧美极品在线观看| 国产成人午夜电影| 国产va免费精品高清在线| 亚洲欧洲色图综合| 精品国产综合久久| 久久久久国色av免费看影院| 在线手机中文字幕| 国产精品免费看久久久无码| 亚洲欧美综合v| 东方aⅴ免费观看久久av| 人狥杂交一区欧美二区| 水蜜桃在线免费观看| 久久久国产成人精品| 国产91丝袜在线播放0| 九色porny91| 久久久99精品免费观看| 99re99| 日韩你懂的在线观看| 成人国产精品入口免费视频| 亚洲精品欧美日韩专区| 久久国内精品视频| 曰韩不卡视频| 国产一区不卡视频| 亚洲精品97久久久babes| 国产午夜精品久久久| 日韩国产一区| 精品视频无码一区二区三区| 欧美三级视频在线| 精品丝袜在线| 91免费视频网站在线观看| 成人激情自拍| 18av在线视频| 可以在线看的av网站| 国产精品成人aaaaa网站| 色视频欧美一区二区三区| 97精品久久久午夜一区二区三区 | 精品日本12videosex| 又黄又爽无遮挡| 日本黑人久久| 最近中文字幕日韩精品| 欧美精品一二三| 国产精品久久国产愉拍| 欧美尿孔扩张虐视频| 日韩少妇视频| 91香蕉视频污版| 国产91在线播放精品91| 久久久精品2019中文字幕神马| 久久久久久久久久久电影| 久久99国产精品久久99果冻传媒| 男男gay无套免费视频欧美| 玖玖精品一区| 电影亚洲一区| 天天干夜夜干| 亚洲成人福利在线观看| 亚洲精品美女久久7777777| 日本欧美一区二区三区乱码| 日韩国产专区| 综合激情视频| 在线欧美福利| 麻豆91精品91久久久的内涵| 蜜臀精品一区二区三区在线观看| 99伊人成综合| 日本vs亚洲vs韩国一区三区| 在线成人h网| blacked蜜桃精品一区| 成人性生交大片免费看在线播放| 国产在线一二三| 在线观看男女av免费网址| 92国产精品| 亚洲电影一区| 一区一区三区| 国产精品18hdxxxⅹ在线| 夜色77av精品影院| 日本精品另类| 久久99国产精一区二区三区| 激情综合婷婷| 中文一区二区三区四区| 激情亚洲影院在线观看| 成人午夜网址| 永久免费精品视频| 国产免费成人在线| 亚洲天堂成人在线| 国产精品乱子久久久久| www国产成人| 高清精品在线| 黄色综合网址| 伊人久久大香| 日韩黄色av| 尤物网精品视频| 日韩视频免费| 激情五月激情综合网| 国产一区二区不卡老阿姨| 久久99热国产| 日韩精品一二三四| 中文字幕永久在线不卡| 日韩欧美黄色影院| 91av网站在线播放| 亚洲欧美日韩在线综合| 91xxxxx| 麻豆理论在线观看| 日韩电影在线视频| 99国产精品久久久| 色综合天天天天做夜夜夜夜做| 亚洲制服欧美中文字幕中文字幕| 欧美一级视频精品观看| 亚洲爱爱爱爱爱| 亚洲精品永久免费精品| 成人动漫视频在线观看免费| 亚洲少妇第一页| 欧洲一区二区三区| 国内自拍视频一区| 日韩一级特黄| 99久久久久免费精品国产 | 精品一区二区国语对白| 国产精品萝li| 午夜精品福利视频| 大香煮伊手机一区| 黄色欧美在线| 亚洲黄色免费电影| 国产精品中文字幕在线| 国产免费av在线| 秋霞午夜鲁丝一区二区老狼| 久久影视电视剧免费网站清宫辞电视| 人人澡人人爽人人揉| 99av国产精品欲麻豆|