Java 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.Test
        public 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 Methodstatic 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

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小宝945

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

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

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

打赏作者

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

抵扣说明:

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

余额充值