【JDK 16】Record

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 静态变量;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码鹿的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值