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 需下载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, 小编个人觉得还是挺好用的, 只作值对象的话,几乎可以取代静态内部类了,代码简洁.小编建议,想要体验代码的魅力,还是自己动手实践一下比较好-
最后小编想说,今年疫情加上一直都存在的互联网寒冬,让本就困难的面试更是雪上加霜,但是,各位,不要气馁,只要能够在平时的时候丰富自己,提前做准备,其实相对来说问题真的不大,想要找到一份工作还是可以的,但是,想要达到心仪的水平,还需要更多的努力,为此,小编准备了这样的一些资料,有需要的, 可以私信“资料”获取,包括文档和面试