Java 16 新特性:record类
以前我们定义类都是用class
关键词,但从Java 16开始,我们将多一个关键词record
,它也可以用来定义类。record
关键词的引入,主要是为了提供一种更为简洁、紧凑的final
类的定义方式。
下面就来具体了解record类的细节。配套视频教程:Java 16 新特性:使用record声明类
声明record类
声明record类的基础语法:
record range(int start, int end){}
我们知道class类可以在单独文件中生命,也可以在其他类中申明。那么record类也一样,它有这几种申明方式:
- 单独文件申明:
public record range(int start, int end){}
- 在类内部申明:
public class DidispaceTest {public record range(int start, int end){}
}
- 函数内申明:
public class DidispaceTest {public void test() {public record range(int start, int end){}}
}
record类详解
在知道了如何申明之后,你一定会想用record
申明的就那么点元素,它到底会具备什么能力呢?
因为record
关键词申明类主要是为了简化一些类的申明,所以它本质就是一类特殊的class,或者说是某一个模版的class。
record
申明的类,具备这些特点:
- 它是一个
final
类 - 自动实现
equals
、hashCode
、toString
函数 - 成员变量均为
public
属性
所以,对于之前写的range类,它等价于一个这样的类:
public final class range{final int start;final int end;public range(int start, int end) {this.start = start;this.end = end;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;range range = (range) o;return start == range.start && end == range.end;}@Overridepublic int hashCode() {return Objects.hash(start, end);}@Overridepublic String toString() {return "range{" +"start=" + x +", end=" + y +'}';}public int start(){return start;}public int end(){return end;}
}
因为一些函数是隐藏的,在range定义的时候,我们看不到,所以我们可以尝试写这样一段测试代码来验证一下:
@Test
public void test() {range r = new range(100, 200);log.info(r.toString());range r2 = new range(100, 200);log.info(String.valueOf(r.equals(r2)));
}
定义成员函数
因为record
申明的本质也是类,那么定义成员函数肯定也是可以的。
比如,我们可以这样在record
类中定义成员函数:
record range(int start, int end){int distance(){return end - start;}
}
然后,就可以这样调用它:
range r = new range(100, 200);
r.distance();
如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我,持续更新Java新特性专栏!
欢迎关注我的公众号:程序猿DD。前沿技术早知道,弯道超车有希望!积累超车资本,从关注DD开始!
Java 16 新特性:record类相关推荐
- Java | 详解 Java 16 新特性 Record 记录类
1 概述 Java Record 是一种不变类,类似于 String,Integer.让我们看一个简单的例子. public record Data( int x, int y) 我们使用 recor ...
- Java 16 新特性介绍
本文要点 Java 16 和即将发布的 Java 17 引入了大量特性和语言增强,有助于提高开发人员的生产力和应用程序性能 Java 16 Stream API 为常用的终端操作提供了很多新方法,有助 ...
- Java 8 新特性 Stream类的collect方法
1.Collectors.toList():转换成List集合./ Collectors.toSet():转换成set集合. System.out.println(Stream.of("a& ...
- Java JDK8新特性Optional类
Optional类 1.该类java.util包下,是不能被继承的泛型类即:public final class Optional<T>. 2.该类有两个私有属性: T value和 静态 ...
- Java 8 新特性 Optional 类学习,理解并应用。NullPointerException空值检测
- java strlen,跟妹妹聊到 Java 16 新特征,真香!
Java 16新特性 2021年3月16日,甲骨文正式发布了Java 16!想当年JDK1.6新出的场景和历历在目,一瞬间,版本已经变成了16,真正体会了一把什么叫做光阴似箭,沧海桑田.虽然目前大部分 ...
- Java 8新特性:Optional类
Java 8新特性:Optional类 在上一篇介绍Stream流式数据处理的文章中提到了Optional类,这是Java 8新增的一个类,用以解决程序中常见的NullPointerException ...
- 换掉 Java 8 Java 1718 新特性真香
Java 17 Java 17 在 2021 年 9 月 14 日正式发布,Java 17 是一个长期支持(LTS)版本,这次更新共带来 14 个新功能. JEP 306:恢复始终严格的浮点语义 既然 ...
- 换掉 Java 8 !Java 1718 新特性真香
今天来分享下 Java 17 和 Java 18 的一些新特性. Guide 这里也是真的建议有条件的小伙伴尝试一波 Java 17!不要死守 Java 8 了! Java 17 img Java 1 ...
最新文章
- 计算机笔试图形推理题,【笔记】教资笔试丨4分钟掌握信息处理以及逻辑判断!...
- python递归详解+汉诺塔小案例_汉诺塔,python递归实现解法步骤
- u盘安装Fedora18
- ICallbackEventHandler使用
- AI技术已达如此高度:去码、上色6到飞起
- 2020CCPC(长春) - Strange Memory(树上启发式合并+位运算)
- RGB(FFFFFF)转255:255:255
- jsf集成spring_JSF 2,PrimeFaces 3,Spring 3和Hibernate 4集成项目
- 开源无人机_开源无人机,欧洲开源等等
- UI设计实用素材|扁平化设计的模板
- UVA - 10129 Play on Words(欧拉回路+并查集)
- css-a:visited
- java后端AppV3版本微信支付CV大法2021-11-12
- Jeff Dean:谷歌大脑背后的“大脑” | AI名人堂
- 金桔智能门锁实现人证房三统一原理
- 【实用软件】电脑wifi密码查看器
- 转:战略思维的五个要素,你都具备了吗?
- 如何搭建Hadoop分布式环境?我来教你怎么做![内含测试小案例]
- oracle+clod+和bolb,Azure存储Blob类型(CloudBlobContainer,CloudBlobClient等)和线程安全
- 修复 yum 坏掉 报错There was a problem importing one of the Python modules 教程
热门文章
- Android chrisbanes-PhotoView 使用案例
- IB/A-Level/美国+AP三大主流课程有哪些国际学校?
- Flask框架详细教程
- 每周一篇 文献阅读—pape9 (用于单图像去雾的特征融合注意网络FFA-Net)
- LT9211芯片资料分享
- c语言用赫夫曼编码压缩文件,用哈夫曼编码C语言实现文件压缩
- 软阈值函数作用图matlab,软阈值(Soft Thresholding)函数解读
- 关闭tcp连接时有时发送FIN有时发送RST
- ArcBlock ⑪ 月报 | 无惧寒冬 ABT 2019 区块链远征启程
- 支付宝七(商户会员卡之发放卡券)