java16新特性-Records

java16新特性-Records
jwangjava14新特性-Records(预览)
Java 14 引入了一项令人期待的新特性——Records 类型,,它通过简化不可变数据的定义和使用,进一步提升了Java语言在数据模型上的表达能力
语法规则
Records 类型使用关键字 record 定义,语法简洁明了。下面是一个基本的 Records 类型的例子
public record Point(int x, int y) {} |
Point 是一个 Records 类型,包含两个 int 类型的字段 x 和 y。Records 类型默认是不可变的,字段被声明为 final 并且只有 getter 方法,不可修改
类型的优势
简洁的定义:通过 record 关键字,可以在一行内定义一个简单的数据封装类,减少了样板代码的编写。
自动实现方法:编译器会自动为 Records 类型生成 equals、hashCode 和 toString 方法,这些方法基于所有字段的内容。
不可变性:Records 类型的字段默认是 final 的,并且提供了只读的访问方法,避免了意外的数据修改。
模式匹配支持:Records 类型与模式匹配结合使用,可以更方便地进行数据的解构和匹配。
应用
Records 类型适用于许多场景,特别是需要简单的数据传输对象(DTOs)、不可变数据类型或者数据传递和序列化的情况
public record Person(String name, int age) {} |
相比传统的 Java 类,Records 类型具有更高的可读性和简洁性。通过自动实现方法和不可变性,Records 类型使得数据的定义和使用更加一致和安全,减少了代码的冗余和错误的可能性
java15新特性-Record(第二次预览)
Record类的关键特性
- 不可变性:Record默认定义的成员变量是私有的,并且是最终的(final),这意味着一旦Record实例被创建,其内部状态不可被改变。
- 自动化方法实现:Record自动实现了equals、hashCode和toString方法,这些方法都是基于Record中声明的所有参数。
- 构造器:Record会自动生成一个带有所有成员变量作为参数的构造器,无需开发者手动编写。
- 成员变量和访问器方法:Record中声明的所有成员变量都会自动具有getter方法,而无需显式地进行定义。
- 结构性表示:Record类允许开发者在定义时提供一个紧凑的结构体形式,使得数据结构的表示更为直观和清晰。
- 只读类实现
public record Person(String name, int age) {} |
- 反编译后
// Compiled from "ExampleRecord.java" |
可见,record为我们省掉了太多的代码了。然而,它确实有一些局限:
- 它们是final类型(反编译源码可见)
- 它们不能被声明为abstract
- 不能使用native方法(这一点对一般开发者没有影响)
java16新特性-Record(正式)
Java 14 引入了一个新的类类型 record 作为预览功能,以方便创建不可变数据对象。 Java 15 进一步增强了 record 记录类型。 在 Java16 中,record 现在是 JDK 的标准功能


