参考资料
目录
一. 介绍
- 是一种特殊的java类,在
Java16
中正式出现,用于创建一个不可变的类。该类一经创建并赋值后,就不可再改变了。 - 类以及所有的属性都是final修饰的, Record类不能被继承。
- 可用于创建一个简单的数据传输对象(DTO),用来传输数据。
record类
会自动生成,全参构造方法,hashCode()方法,equals()方法,toString()方法和用来获取数据的方法。- 注意,在record类对象创建后,只能get数据,无法set数据,这一点和普通的POJP不同。
- 在只读取数据的场景中,可以代替
lombok
。
二. 基本语法
- 支持实现接口,不支持继承
- 支持静态变量,静态代码块,静态方法
- 支持注解
- 不支持成员变量和初始化代码块
- 可内部嵌套record,嵌套的record是static状态的
- 内部record只能访问外部record的静态方法和变量
- 可通过反射来获取record的信息
⏹基本构造示例
三. 各种特性示例
3.1 准备
⏹接口
public interface S002Api {
Map<String, String> getS001Data();
}
⏹创建一个record类,该类有内部record类,并且实现了接口
import java.util.List;
import java.util.Map;
import org.springframework.util.ObjectUtils;
public record StudentRecord(Integer id, String name, List<String> addressList) implements S002Api {
// 静态变量
public static Integer money;
// 只允许静态变量,成员变量变量会报错
// String food = "汉堡";
// 不支持初始化代码块
/*
{
}
*/
// 静态代码块
static {
money = 100;
}
// 构造方法的简单写法,若在赋值时,不需要进行二次数据处理,可以简化为下面这种写法
// record会给我们自动赋值
public StudentRecord {
// 在构造对象时,对数据进行校验
if (ObjectUtils.isEmpty(addressList)) {
throw new RuntimeException("addressList不能为空");
}
}
// 静态方法
public static void printMsg1() {
System.out.println("Hello world! printMsg1");
}
// 非静态方法
public void printMsg2() {
System.out.println("Hello world! printMsg2");
}
// 实现接口中的方法