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)

今天閒來無聊,在和朋友聊天的時候,突然提到了jdk14,然後就去看了一下相關的文檔,還真的讓我找到一個比較好玩的技術--record,接下來,就通過代碼來一探JDK14之record

使用形式

其實要是看代碼編寫的話,就一行

<code>// 定義
record Image(@SerializedName("media_id")
String mediaId){}
// 使用Image
image = new Image("傳mediaId");
// 取裡面的值
image.mediaId();/<code>

如上我定義了一個record,Image,裡面有一個String mediaId 那按以前的寫法呢,大致是這樣的

<code>static class ImageClass{ 
// 定義一個屬性
private String mediaId;
// 定義一個構造函數

public ImageClass(String mediaId) {
this.mediaId = mediaId; }
// 定義一個get方法
public String getMediaId()
{ return mediaId; } }/<code>

但是現在!!! 現在只要一行就可以搞定了!!! 真的是相見恨晚的感覺啊!!!

在做微信公眾號開發的小夥伴應該有這種體驗,那麼多的嵌套實體類. 用map寫吧, 不雅觀, 用 static class 寫吧, 馬上一個文件就要好幾百行了. 這時候如果領導同意的話,可以試試 jdk14 中的 record哦~~

(話說,,我們公司現在連jdk11還沒有上,你們呢? )

運行配置

因為這個功能還在預覽當中,所以需要一些額外的配置才能跑起來

idea

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

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

gradle

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

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

./gradlew wrapper --gradle-version=6.3

build.gradle

在gradle的腳本文件中需要添加如下配置

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


最後一步把fastJson換成gson

下面我們用一個main函數演示一下

<code>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;
} }/<code>

輸出結果如下:

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

可以看到,不管是直接record還是外面有包裝類的情況下, fastJson都不能序列化,但gson可以在外面有包裝類的情況下進行序列化

撒花撒花! 本篇完結

關於record, 小編個人覺得還是挺好用的, 只作值對象的話,幾乎可以取代靜態內部類了,代碼簡潔.小編建議,想要體驗代碼的魅力,還是自己動手實踐一下比較好-

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

多線程與高併發

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

JVM與性能優化知識點整理

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

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

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

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

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

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

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

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

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

網約車項目實戰

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

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

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

這些PDF+視頻資料小編已經為大家整理好了,需要領取的朋友,麻煩幫忙轉發這篇文章+私信【資料】二字即可


分享到:


相關文章: