写点什么

进击的 Java(七)

作者:ES_her0
  • 2021 年 11 月 15 日
  • 本文字数:793 字

    阅读完需:约 3 分钟

天下文章一大抄。这句话放哪都没错,并不是贬义,技术的进步总是螺旋上升的,每一次更新迭代都会基于前人的工作基础,每次都是从头到尾的革命性创新是不可能的,也没必要。那么今天要讲的就是一个在 Java14 中预览,Java16 正式发布的特性:Record 类型。

首先如果你了解过一点点 kotlin,这个 Record 类型跟 kotlin 中的 data class 十分类似,甚至我感觉命名上 kotlin 更友好一些,可以很直观的了解是干嘛的。相比之下,Record 就是显的有些隐晦。如果你恰好没接触过 kotlin,只写 Java 的话,那你一定知道 lombok 这样的插件存在。没错,Record 类型就是官方的 lombok 插件。Record 类会生成 get/set/hashcode/equals 和构造方法,没有多余的注解和代码。写法上跟 data class 如出一辙,可以说除了改了个名字,别的是一模一样。

public record EmployeeRecord(Long id, 		String firstName, 		String lastName, 		String email, 		int age) {	}
复制代码

这就是一个 record 类,甚至可以不用写 class 关键字。不仅可以是一个单独的类文件,也可以是一个成员类:

public class EmployeeRecord {     public record User(long id, String name, int age) {}  }
复制代码

这样应对多个临时 dto,vo 之类的数据时就可以写在一个类里面了。还可以出现在方法里:

public class EmployeeRecord {         public void test() {             record Mail (long id, String content){}             Mail mail = new Mail(10, "content");            }         }
复制代码

作为一个临时数据类,在一些灵活的场景下会有用武之处。

需要注意的几点

  1. 构造函数

默认 record 类具有全部属性的构造函数

  1. 属性

属性最好在类声明时就写在括号中,如果想在 body 中单独声明,仅支持 static 属性,不建议这样

  1. 不能被继承

record 类不能被继承

官方设计 record 类的初衷就是当作一个数据类,不要再出现什么 dto,form,vo 等等之类的类了,而且还在类上写一堆乱糟糟的注解。更简洁,更实用。


用户头像

ES_her0

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
进击的Java(七)