网站标头设计,包装盒设计,手机评分网站,软件外包公司好不好定义和特性
JDK16 最终增加了record关键字#xff0c;record定义的类希望成为数据传输对象 也叫数据载体#xff0c;使用record 时候#xff0c;编译器会自动生成#xff1a;
不可变的字段一个规范的构造器每个元素(组件)都有访问方法equalshashCodetoString
public rec…定义和特性
JDK16 最终增加了record关键字record定义的类希望成为数据传输对象 也叫数据载体使用record 时候编译器会自动生成
不可变的字段一个规范的构造器每个元素(组件)都有访问方法equalshashCodetoString
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小白, age20]
编译器做了哪些事情呢 可以通过 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现在做为数据传输类更多的是支持函数式编程也是这样来避免并发会出现的问题。