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

使用形式

其实要是看代码编写的话,就一行

// 定义

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,如下图所示

JDK14五部曲,359: Records代码实践不容错过

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

输出结果如下:

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代码实践不容错过

关注公众号:Java架构师联盟,和大家一起讨论技术

原文 

https://segmentfault.com/a/1190000022321340

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » JDK14五部曲,359: Records代码实践不容错过

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址