JDK14新特性之Record
Record类型
1、概念
记录类型(record
)是JDK 14
的另一个预览功能。记录类型的作用类似于Kotlin
中的数据类(data class
)和Scala
中的case class
。记录类型的作用是作为不可变数据的封装。类似于枚举类型,记录类型是一种形式受限的类。一个记录类型由名称和状态描述两部分组成。状态描述声明了记录中包含的组件。
2、 示例
下面代码中的Student
就是一个记录类型。记录类型使用record声明。Student
记录类型的状态描述由id
和name
两个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相关推荐
- Java 16 新特性:record类
以前我们定义类都是用class关键词,但从Java 16开始,我们将多一个关键词record,它也可以用来定义类.record关键词的引入,主要是为了提供一种更为简洁.紧凑的final类的定义方式. ...
- JDK14 新特性详解,2020-03-17 正式发布
预览版:该功能在当前版本可以使用,如果效果不是很好的话,可能以后的其他版本就会删去该功能. 最终版:该功能在之前版本效果很好,之后的每个版本中都会存在该功能. 1.Switch(最终版) 和之前的 j ...
- .NET 6新特性试用 | record struct
前言 在以前的文章中,我们介绍过record类型,它具有不变性(<为什么应该用record来定义DTO>)和值相等性(<为什么应该用record来定义DTO(续)>). rec ...
- JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)
文章目录 1. 新语法结构 1.1 Java的REPL工具: jShell命令 1.2 异常处理之try-catch资源关闭 1.3 局部变量类型推断 1.4 instanceof的模式匹配 1.5 ...
- JDK 5、6、7、8、9、10、11、12、13、14 新特性汇总
JDK5 新特性 自动拆装箱 Foreach 静态导入 可变参数 Var args 枚举 格式化输出 泛型 ProcessBuilder 内省 线程并发库(JUC) 监控和管理虚拟机 元数据 JDK6 ...
- Java8-19新特性一览 ,认识全新的前沿技术
文章目录 Java8-19新特性一览 ,认识全新的前沿技术 前言 你的收获 Java发展趋势 准备工作 新特性 1.接口private 1).说明 2).案例 3).注意 2.类型推断 1).说明 2 ...
- JDK9-17开发常用的新特性
以下样例代码均可在样例代码中查看 jdk9新特性 新功能和库的更新 "_"为关键字,不可作为变量名 As of Java 9, '_' is a keyword, and may ...
- Java15来了!!!一文详解JDK15新特性
读懂JDK15新特性,这一篇就够了 一.Java历史简谈 二.我们该如何学习Java新特性 三.Java15新特性详解 特性一:密封类(语法层面) 特性二:instanceof 自动匹配模式(语法层面 ...
- 浅谈java15新特性
你发任你发,我用Java8. jdk15的安装和新版idea的安装就不说了,下面奉上两个软件. 链接: https://pan.baidu.com/s/1hOb0CChSfYotFl3s3QL2yA ...
最新文章
- Linux--Socket Buffer--Netowrk Devices--Network Drivers
- 【数据挖掘笔记十一】高级聚类分析
- 计算机专业 程序员技术练级攻略(转载)
- 原来它一直在“装嫩”|“心电图”揭秘富锂巨星真实年龄
- 日常问题——VMware下的CentOS7 Ping不通百度
- linux使用教程_iTOP-4412-QtE系统源码以及Linux系统-wfi设置以及使用文档 - 心底狂像...
- Struts中提示Invalid result location value/parameter
- 【原创】大叔经验分享(11)python引入模块报错ImportError: No module named pandas numpy...
- 目前为止最全的微信小程序项目实例
- 5行代码识别各种验证码
- 初探Flowable流程引擎,偶遇多实例子流程
- Hub设备、网桥、二层交换机设备概述
- fydeos 安装linux程序,FydeOS安装教程-电脑系统安装手册
- 3d效果技术java,java3D技术展示
- PanoSim 5 功能模块简介--PanoExp
- SLAM中的李群和李代数
- 医药研发产业新平台在从化
- IP-guard项目实施前情况调查表
- jQuery详解(二) 函数和事件
- Android笔记:Zing二维码扫描解决二维码被拉伸