JDK14,從出世到如今,其內部的更新,真的是帶給了人們太多的驚喜,尤爲是程序員,jdk14真的是吸引這一批程序員去一探它的神祕色彩,從最一開始的五大新特性程序員
JDK13:5大新特性:面試
350: Dynamic CDS Archives設計模式
351: ZGC: Uncommit Unused Memory緩存
353: Reimplement the Legacy Socket API性能優化
354: Switch Expressions (Preview)微信
355: Text Blocks (Preview)多線程
中科院工程師準備一個月,終於將JDK13新特性ZGC整理完了架構
今天閒來無聊,在和朋友聊天的時候,忽然提到了jdk14,而後就去看了一下相關的文檔,還真的讓我找到一個比較好玩的技術--record,接下來,就經過代碼來一探JDK14之record併發
其實要是看代碼編寫的話,就一行app
// 定義
record Image(@SerializedName("media_id")
String mediaId){}
// 使用Image
image = new Image("傳mediaId");
// 取裏面的值
image.mediaId();
如上我定義了一個record,Image,裏面有一個String mediaId 那按之前的寫法呢,大體是這樣的
static class ImageClass{
// 定義一個屬性 private String mediaId; // 定義一個構造函數 public ImageClass(String mediaId) { this.mediaId = mediaId; } // 定義一個get方法 public String getMediaId()
{ return mediaId; } }
可是如今!!! 如今只要一行就能夠搞定了!!! 真的是相見恨晚的感受啊!!!
在作微信公衆號開發的小夥伴應該有這種體驗,那麼多的嵌套實體類. 用map寫吧, 不雅觀, 用 static class 寫吧, 立刻一個文件就要好幾百行了. 這時候若是領導贊成的話,能夠試試 jdk14 中的 record哦~~
(話說,,咱們公司如今連jdk11尚未上,大家呢? )
由於這個功能還在預覽當中,因此須要一些額外的配置才能跑起來
idea 需下載2020.1 RC 版本,而後在項目設置中,選擇語言級別爲14-preview,以下圖所示
gradle須要升級到 6.3 及之後才支持jdk14, maven未驗(已經好久沒用maven了,gradle真香)
可以使用以下命令進行升級:
./gradlew wrapper --gradle-version=6.3
在gradle的腳本文件中須要添加以下配置
tasks.withType(JavaCompile) {
options.compilerArgs += "--enable-preview"}
tasks.withType(Test) {
jvmArgs += "--enable-preview"
}
tasks.withType(JavaExec)
{ jvmArgs += '--enable-preview'}
下面咱們用一個main函數演示一下
public static void main(String[] args) {
record OutRecord(String name){ } OutRecord outRecord = new OutRecord("xiaodao"); // 直接對record序列化,都沒有結果 Gson gson = new Gson(); System.out.println("gson:"+gson.toJson(outRecord)); System.out.println("fastJson:"+JSON.toJSONString(outRecord)); // 外面用個類包裝一下 Holder holder = Holder.init("xiaodao"); System.out.println("gson:"+gson.toJson(holder)); System.out.println("fastJson:"+JSON.toJSONString(holder)); } // 來於包裝的類 static class Holder{ // 聲明一個record InnerRecord record; // 定義一個record record InnerRecord(String name){
} /** * 推薦這種實例過種封狀在類裏面的寫法
\*@param name \* @return \*/ public static Holder init(String name){ Holder holder = new Holder(); InnerRecord innerRecord = new InnerRecord(name); holder.record = innerRecord; return holder; } }
輸出結果以下:
能夠看到,不論是直接record仍是外面有包裝類的狀況下, fastJson都不能序列化,但gson能夠在外面有包裝類的狀況下進行序列化
關於record, 小編我的以爲仍是挺好用的, 只做值對象的話,幾乎能夠取代靜態內部類了,代碼簡潔.小編建議,想要體驗代碼的魅力,仍是本身動手實踐一下比較好-
最後小編想說,今年疫情加上一直都存在的互聯網寒冬,讓本就困難的面試更是雪上加霜,可是,各位,不要氣餒,只要可以在平時的時候豐富本身,提早作準備,其實相對來講問題真的不大,想要找到一份工做仍是能夠的,可是,想要達到心儀的水平,還須要更多的努力,爲此,小編準備了這樣的一些資料,有須要的,能夠私信「資料」獲取,包括文檔和麪試
關注公衆號:Java架構師聯盟,和你們一塊兒討論技術