本文主要是介绍03- javaBean 新花样? record 新特性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
定义和特性
JDK16 最终增加了record关键字,record定义的类希望成为数据传输对象 也叫数据载体,使用record 时候,编译器会自动生成:
- 不可变的字段
- 一个规范的构造器
- 每个元素(组件)都有访问方法
- equals
- hashCode
- toString
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 ,进行转化, 等价处理。
//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); } }
注意事项
- record 里面字段就是组件的不可变是引用不可变,如果是对象的话,里面的参数是可变的
- record现在做为数据传输类更多的是支持函数式编程,也是这样来避免并发会出现的问题。
这篇关于03- javaBean 新花样? record 新特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!