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,如下圖所示
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>
輸出結果如下:
可以看到,不管是直接record還是外面有包裝類的情況下, fastJson都不能序列化,但gson可以在外面有包裝類的情況下進行序列化
撒花撒花! 本篇完結
關於record, 小編個人覺得還是挺好用的, 只作值對象的話,幾乎可以取代靜態內部類了,代碼簡潔.小編建議,想要體驗代碼的魅力,還是自己動手實踐一下比較好-
最後小編想說,今年疫情加上一直都存在的互聯網寒冬,讓本就困難的面試更是雪上加霜,但是,各位,不要氣餒,只要能夠在平時的時候豐富自己,提前做準備,其實相對來說問題真的不大,想要找到一份工作還是可以的,但是,想要達到心儀的水平,還需要更多的努力,為此,小編準備了這樣的一些資料,有需要的,可以私信“資料”獲取,包括文檔和麵試
多線程與高併發
JVM與性能優化知識點整理
23種設計模式(馬士兵課程:以坦克大戰項目為實戰)
Redis深度歷險:核心原理和應用實踐
MySQL技術精粹:架構、高級特性、性能優化與集群實戰
Zookeeper分佈式過程協同技術詳解
網約車項目實戰
億級流量多級緩存架構平臺
這些PDF+視頻資料小編已經為大家整理好了,需要領取的朋友,麻煩幫忙轉發這篇文章+私信【資料】二字即可
閱讀更多 程序猿愛code 的文章