03- javaBean 新花样? record 新特性

定义和特性

JDK16 最终增加了record关键字,record定义的类希望成为数据传输对象 也叫数据载体,使用record 时候,编译器会自动生成:

  1. 不可变的字段
  2. 一个规范的构造器
  3. 每个元素(组件)都有访问方法
  4. equals
  5. hashCode
  6. toString
java 复制代码
public record Student(String name, int age) {  
  
	 // 简约 构造方法,不在这里写入参数 自动配置参数类型
    public Student {  
        //可以在这个地方进行校验参数
        if (Objects.isNull(name)) {  
            throw new RuntimeException("name is null");  
        }  
  
    }  


}


public class RecordTest {  
  
    public static void main(String[] args) {  
  
        Student student = new Student("小白", 20);  
        System.out.println(student.name());  
        System.out.println(student.age());  
        System.out.println(student.toString());  
  
    }  
}

---
小白
20
Student[name=小白, age=20]

编译器做了哪些事情呢? 可以通过 idea,里面的功能进行covert record to class ,进行转化, 等价处理。

java 复制代码
//final 修饰不会被继承
public final class Student {  
    private final String name;  
    private final int age;  
  
    public Student(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
  
    @Override  
    public String toString() {  
        return "Student[" +  
                "name=" + name + ", " +  
                "age=" + age + ']';  
    }  


	//只有访问方法,在没有set方法
    public String name() {  
        return name;  
    }  
  
    public int age() {  
        return age;  
    }  
  
    @Override  
    public boolean equals(Object obj) {  
        if (obj == this) return true;  
        if (obj == null || obj.getClass() != this.getClass()) return false;  
        var that = (Student) obj;  
        return Objects.equals(this.name, that.name) &&  
                this.age == that.age;  
    }  
  
    @Override  
    public int hashCode() {  
        return Objects.hash(name, age);  
    }  
  
}

注意事项

  1. record 里面字段就是组件的不可变是引用不可变,如果是对象的话,里面的参数是可变的
  2. record现在做为数据传输类更多的是支持函数式编程,也是这样来避免并发会出现的问题。
相关推荐
-Thinker3 分钟前
【无标题】
java·开发语言·算法·图搜索
王五周八7 分钟前
Tesseract OCR的Java使用(附安装包,非常详细)
java·开发语言·ocr
旧书包的青春7 分钟前
2026年6月11日
java
一直奔跑在路上8 分钟前
深入浅出RDMA:原理、应用与实战指南
开发语言·php
j7~16 分钟前
【C++】STL--string类--拆析解剖string类的实现以及string类的底层详解(2)
开发语言·c++·浅拷贝·深拷贝·string类的实现·string拷贝构造·string赋值重载
实在智能RPA20 分钟前
航空Agent落地效果评估指标:2026年企业级智能自动化价值度量体系拆解
java·网络·人工智能·ai·自动化
程序员二叉26 分钟前
【JUC】AQS底层深度拆解|独占/共享模式|队列原理全详解
java·开发语言·面试·juc
踏着七彩祥云的小丑27 分钟前
Go 学习第6天:结构体 + 切片 + range遍历
开发语言·学习·golang·go
读书札记202230 分钟前
Qt中windeployqt.exe工具的使用:解决使用CMake创建的项目点击exe文件后系统提示0xc000007b的问题
开发语言·qt
地铁潜行者31 分钟前
消息堆积后,为什么一扩容消费者,MySQL 先被打崩了?
java·后端