Record类型

1、概念

记录类型(record)是JDK 14的另一个预览功能。记录类型的作用类似于Kotlin中的数据类(data class)和Scala中的case class。记录类型的作用是作为不可变数据的封装。类似于枚举类型,记录类型是一种形式受限的类。一个记录类型由名称和状态描述两部分组成。状态描述声明了记录中包含的组件。

2、 示例

下面代码中的Student就是一个记录类型。记录类型使用record声明。Student记录类型的状态描述由idname两个Integer、String类型的组件组成。可以通过id()name()方法来访问。

/*** Record的使用** @author Leon* @date 2020-04-13 8:47*/
public class RecordDemo
{public static void main(String[] args) {Student stu = new Student(1001, "张三");System.out.println(stu);System.out.println(stu.getClass());System.out.println(stu.id());System.out.println(stu.name());System.out.println("==============================");Person p = new Person(1000, "李四", 22);System.out.println(p);System.out.println(p.getClass());System.out.println(p.getId());System.out.println(p.getName());System.out.println(p.getAge());}
}record Student(Integer id, String name){}class Person
{private Integer id;private String name;private Integer age;public Person(Integer id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

3、 深入理解

记录类型有自动生成的成员有以下几种:

  • 状态描述中的每个组件都有对应的private final字段。
  • 状态描述中的每个组件都有对应的public访问方法。方法的名称与组件名称相同。
  • 一个包含全部组件的公开构造器,用来初始化对应组件。
  • 实现了equals()和hashCode()方法。equals()要求全部组件都必须相等。
  • 实现了toString(),输出全部组件的信息。

通过编译软件,查看Student的文件的内容如下:

final class Student extends java.lang.Record {private final java.lang.Integer id;private final java.lang.String name;public Student(java.lang.Integer id, java.lang.String name) { /* compiled code */ }public java.lang.String toString() { /* compiled code */ }public final int hashCode() { /* compiled code */ }public final boolean equals(java.lang.Object o) { /* compiled code */ }public java.lang.Integer id() { /* compiled code */ }public java.lang.String name() { /* compiled code */ }
}

从中我们可以得到如下一些关键信息。

  • 记录类型不能继承自其它类
  • 记录类型不能有其他实例字段
  • 记录类型都是final的,也不能是abstract的
  • 记录中的字段也都是final的

如果需要在记录类型的构造器中添加校验或规格化的逻辑,可以定义自己的构造器。

注意

如果构造器不带形式参数(类似下面代码中的方式),则认为是要覆写默认生成的带全部组件的构造器(即覆写Student(Integer id, String name))。

record Student(Integer id, String name)
{public Student {this.id = Math.abs(id);this.name = name.strip();}
}

JDK14新特性之Record相关推荐

  1. Java 16 新特性:record类

    以前我们定义类都是用class关键词,但从Java 16开始,我们将多一个关键词record,它也可以用来定义类.record关键词的引入,主要是为了提供一种更为简洁.紧凑的final类的定义方式. ...

  2. JDK14 新特性详解,2020-03-17 正式发布

    预览版:该功能在当前版本可以使用,如果效果不是很好的话,可能以后的其他版本就会删去该功能. 最终版:该功能在之前版本效果很好,之后的每个版本中都会存在该功能. 1.Switch(最终版) 和之前的 j ...

  3. .NET 6新特性试用 | record struct

    前言 在以前的文章中,我们介绍过record类型,它具有不变性(<为什么应该用record来定义DTO>)和值相等性(<为什么应该用record来定义DTO(续)>). rec ...

  4. JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)

    文章目录 1. 新语法结构 1.1 Java的REPL工具: jShell命令 1.2 异常处理之try-catch资源关闭 1.3 局部变量类型推断 1.4 instanceof的模式匹配 1.5 ...

  5. JDK 5、6、7、8、9、10、11、12、13、14 新特性汇总

    JDK5 新特性 自动拆装箱 Foreach 静态导入 可变参数 Var args 枚举 格式化输出 泛型 ProcessBuilder 内省 线程并发库(JUC) 监控和管理虚拟机 元数据 JDK6 ...

  6. Java8-19新特性一览 ,认识全新的前沿技术

    文章目录 Java8-19新特性一览 ,认识全新的前沿技术 前言 你的收获 Java发展趋势 准备工作 新特性 1.接口private 1).说明 2).案例 3).注意 2.类型推断 1).说明 2 ...

  7. JDK9-17开发常用的新特性

    以下样例代码均可在样例代码中查看 jdk9新特性 新功能和库的更新 "_"为关键字,不可作为变量名 As of Java 9, '_' is a keyword, and may ...

  8. Java15来了!!!一文详解JDK15新特性

    读懂JDK15新特性,这一篇就够了 一.Java历史简谈 二.我们该如何学习Java新特性 三.Java15新特性详解 特性一:密封类(语法层面) 特性二:instanceof 自动匹配模式(语法层面 ...

  9. 浅谈java15新特性

    你发任你发,我用Java8.  jdk15的安装和新版idea的安装就不说了,下面奉上两个软件. 链接: https://pan.baidu.com/s/1hOb0CChSfYotFl3s3QL2yA ...

最新文章

  1. Linux--Socket Buffer--Netowrk Devices--Network Drivers
  2. 【数据挖掘笔记十一】高级聚类分析
  3. 计算机专业 程序员技术练级攻略(转载)
  4. 原来它一直在“装嫩”|“心电图”揭秘富锂巨星真实年龄
  5. 日常问题——VMware下的CentOS7 Ping不通百度
  6. linux使用教程_iTOP-4412-QtE系统源码以及Linux系统-wfi设置以及使用文档 - 心底狂像...
  7. Struts中提示Invalid result location value/parameter
  8. 【原创】大叔经验分享(11)python引入模块报错ImportError: No module named pandas numpy...
  9. 目前为止最全的微信小程序项目实例
  10. 5行代码识别各种验证码
  11. 初探Flowable流程引擎,偶遇多实例子流程
  12. Hub设备、网桥、二层交换机设备概述
  13. fydeos 安装linux程序,FydeOS安装教程-电脑系统安装手册
  14. 3d效果技术java,java3D技术展示
  15. PanoSim 5 功能模块简介--PanoExp
  16. SLAM中的李群和李代数
  17. 医药研发产业新平台在从化
  18. IP-guard项目实施前情况调查表
  19. jQuery详解(二) 函数和事件
  20. Android笔记:Zing二维码扫描解决二维码被拉伸

热门文章

  1. python 生成可执行文件_在Cython中创建一个可执行文件
  2. SSH 详解(实践及应用)
  3. Centos7 添加新用户并赋予权限
  4. phaser3适配微信小游戏
  5. java 代付gas费用和遍历区块链 笔记
  6. IP融合网络引领通信变革
  7. c语言孩子兄弟法存储一棵树,树的孩子兄弟表示法
  8. 自己做的上海市公积金贷款计算器
  9. 【CSS技巧】文字分散对齐的方法
  10. 限制Input只能输入汉字、数字