Java Record
- 1.Java Record的作用与特性
- 2.Java Record 如何使用
- 创建和使用Record
- Record 的 Method
- Record 的构造方法
- Record 的 extends 和 implements
- 3.Record 和 Lombok
- 4.Record类和java.lang.Class类
- 5.instanceof判断Record类型
- 6.Local Record与嵌套Record
Java14 中预览(Java16 release)
的新特性Record
,在 Java 中,Record
是一种特殊类型的类。可用来创建不可变类
,语法简短。Jackson2.12
支持Record
类。Record
用来创建不可变的对象,同时减少了样板代码。
1.Java Record的作用与特性
- 1、带有全部参数的构造方法。√
- 2、pulic 访问器。√
- 3、生成 toString(),hashCode(),equals()方法。√
- 4、无 set、get 方法,没有遵循 Bean 命名规范。√
- 5、final 类,Record类不能被继承,Record 为隐士的 final 类。除此之外与普通类一样。√
- 6、不可变类,通过构造方法创建 Record。√
- 7、final 属性,不可修改。√
- 8、static 类,不能声明实例属性,能声明 static 成员。√
- 9、abstract 类 java.lang.Record 是所有 Record 的父类。√
- 10、Record 类能够实现 java.io.Serializable 序列化和反序列化。√
- 11、Record 支持泛型,例如 record Gif (T t){}。√
2.Java Record 如何使用
创建和使用Record
- IDEA 新建 Class,直接选择 Record。
- 创建 Record 对象
public record User (String name, Integer age) { }
- 使用 Record 类
@SpringBootTest public class Test {@org.junit.jupiter.api.Testpublic void test() {//创建 User record 对象User user = new User("lisi", 21);//调用 record 的 public 访问器和 toString() 方法System.out.println(user.toString() + "\n" + user.name() + "\t" + user.age());} }
Record 的 Method
Record
类和普通的Java Class
一样创建和调用Instance Method
和static Method
。
Record 的构造方法
-
我们可以在 Record 中添加构造方法,有三种类型的构造方法分别是
- 紧凑型构造方法没有任何参数,甚至没有括号。
- 规范构造方法是以所有成员作为参数。
- 定制构造方法是自定义参数个数。
-
紧凑和定制构造方法
public record User(String name, Integer age) {public User {System.out.println("紧凑型构造方法");}public User(String name) {this(name, null);} }
-
编译后:注意紧凑构造方法和规范构造方法合并了
public record User(String name, Integer age) {public User(String name, Integer age) {System.out.println("紧凑型构造方法");this.name = name;this.age = age;}public User(String name) {this(name, (Integer)null);}public String name() {return this.name;}public Integer age() {return this.age;} }
Record 的 extends 和 implements
Java Record
可以与普通类一样实现接口,重写接口中的方法。但是Java Record
不能继承其他的类。
3.Record 和 Lombok
Java Record
是创建不可变类且减少样板代码的好方法。Lombok
是一种减少样板代码的工具。两者表面上有重叠部分,但是实际上两者是不同用途的工具。Lombok
提供语法的便利性,通常预装一些代码模板,根据加入到类中的注解自动执行代码模板。这样的库存粹是为了方便实现POJO
类。通过预编译代码。将代码的模板加入到 class 中。Java Record
是语言级别的,一种语义特性,为了建模而用,数据聚合。简单说就是提供了通用的数据类,充当“数据载体”,用于在类和应用程序之间进行数据传输。
4.Record类和java.lang.Class类
- Record类和java.lang.Class类有关的两个方法:
boolean isRecord(); //判断一个类是否是 Record 类型。 RecordComponent[] getRecordComponents(); //Record的数组,表示此记录类的所有记录组件,我目前的了解应该是有那些属性 。
5.instanceof判断Record类型
instanceof
能够与Java Record
一起使用。编译器指导记录组件的确切数量和类型。并且Java Record
能够自动处理null
。public boolean isEligible(Object obj) {if(obj instanceof User user) {return user.age > 20;}//注意下面两种方式是 JDK19 才引入的if(obj instanceof User(String name ,Integer age) user) {return user.age > 20;}if(obj instanceof User(String name ,Integer age)) {return age > 20;}return false; }
6.Local Record与嵌套Record
Record
可以作为局部对象使用。多个Record
可以组合定义,一个Record
能够包含其他的Record
。