JDK14五部曲,359: Records代碼實踐不容錯過

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

idea 需下載2020.1 RC 版本,而後在項目設置中,選擇語言級別爲14-preview,以下圖所示

gradle

gradle須要升級到 6.3 及之後才支持jdk14, maven未驗(已經好久沒用maven了,gradle真香)

可以使用以下命令進行升級:

./gradlew wrapper --gradle-version=6.3

build.gradle

在gradle的腳本文件中須要添加以下配置

tasks.withType(JavaCompile) {
options.compilerArgs += "--enable-preview"}
tasks.withType(Test) {
jvmArgs += "--enable-preview"
}
tasks.withType(JavaExec)
{ jvmArgs += '--enable-preview'}

最後一步把fastJson換成gson

下面咱們用一個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, 小編我的以爲仍是挺好用的, 只做值對象的話,幾乎能夠取代靜態內部類了,代碼簡潔.小編建議,想要體驗代碼的魅力,仍是本身動手實踐一下比較好-

最後小編想說,今年疫情加上一直都存在的互聯網寒冬,讓本就困難的面試更是雪上加霜,可是,各位,不要氣餒,只要可以在平時的時候豐富本身,提早作準備,其實相對來講問題真的不大,想要找到一份工做仍是能夠的,可是,想要達到心儀的水平,還須要更多的努力,爲此,小編準備了這樣的一些資料,有須要的,能夠私信「資料」獲取,包括文檔和麪試

多線程與高併發

JVM與性能優化知識點整理

23種設計模式(馬士兵課程:以坦克大戰項目爲實戰)

Redis深度歷險:核心原理和應用實踐

MySQL技術精粹:架構、高級特性、性能優化與集羣實戰

Zookeeper分佈式過程協同技術詳解

網約車項目實戰

億級流量多級緩存架構平臺

關注公衆號:Java架構師聯盟,和你們一塊兒討論技術

相關文章
相關標籤/搜索