Record
关键字
r e c o r d \color{blue}{record} record
作用
可提供属性只读的实例
特点
1、提供接收所有属性的构造器
2、自带getter方法,无setter方法,更不能修改实例属性
3、是final类
4、自动重写toString、
equals和
hashCode方法`
定义使用
定义
record 类名 (T1 t1 , T2 t2 , T3 t3) { //逻辑代码 }
record User (String id , String name , int age ){ //逻辑代码 }
使用
User user = new User("10010", "码鹿鸭", -99);
String name = user.name();
int age = user.age();
System.out.println(user.toString());
//打印: User[id=10010, name=码鹿鸭, age=-99]
特殊构造器
public 类名{ //逻辑代码 }
特殊构造器可以对参数进行限制或处理( 注意这里没有放参数的小括号)
比如年龄不可能少于0,我们可以使用特殊构造器进行限制
public record User (String id , String name , int age ){
public User{
if(age < 0) throw new RuntimeException("年龄小于0");
}
}
new User("10010", "码鹿鸭", -99);
此时创建年龄小于0就会报异常
Exception in thread “main” java.lang.RuntimeException: 年龄小于0
如果需要对参数进行处理,可以使用特殊构造器处理
public record User (String id , String name , int age ){
public User{
id = "0x" + id;
}
}
此时属性还可以修改,id 变成 0x10010
System.out.println(new User("10010", "码鹿鸭", 18).id());
//打印: 0x10010
创建实例完毕后,属性就不可修改了
定义方法
可以像其他类一样自定义方法,但不能修改实例属性
public record User (String id , String name , int age ){
public void introduceMyself(){
System.out.println("我的名字是" + name + ",年龄" + age);
}
}
user.introduceMyself();
//打印:我的名字是码鹿鸭,年龄18
定义变量
只能定义静态变量,Record类大括号内不能定义实例变量
public record User (String id , String name , int age ){
public static String 静态变量;
}