Record类的一点小概念嗷。
一. 基本使用
java19 的新特性:
我们先构造一个student的Record类.
默认构造几个属性.
public record Student(Integer id,String name, String email,Integer age) {
}
然后简单搞一点例子
public static void main(String[] args) {
Student student = new Student(1, "张三", "nihao@qq.com", 20);
System.out.println(student.name().equals("张三1"));
System.out.println(student);
}
得出结论:
通过构造方法创建了
目录
一. 基本使用
二.Instance Methods
三.静态方法
四.Record的静态方法
五、Record和lombok
只读的对象, 能够读取到每个的属性, 但是不能设置新的值.
Record用于创建不可变的对象, 同时减少了模版代码.
Record对每个属性提供了public访问器, 例如student.name();
二.Instance Methods
public record Student(Integer id,String name, String email,Integer age) {
public String concat(){
return String.format("姓名: %s,年龄是: %d",this.name,this.age);
}
public static void main(String[] args) {
Student student = new Student(1, "张三", "nihao@qq.com", 20);
String concat = student.concat();
System.out.println(concat);
}
}
三.静态方法
public static String emailUpperCase(String email){
return Optional.ofNullable(email).orElse("no email").toUpperCase();
}
四.Record的静态方法
五、Record和lombok
lombok我们用的太多了,同程在项目中也是经常使用,一种可以减少样模版代码的工具。
而Record是创建不可变对象且减少样模版代码的好方法~
两种具有重叠的部分。
其实也没有啥可以比较的, 但是你要是想比一下,那我也没有办法~~
原生支持 vs 第三方库: Record 是 Java 14 引入的原生特性,它是 Java 语言的一部分,不需要额外的库或插件。而 Lombok 是一个第三方库,需要在项目中添加 Lombok 的依赖,并在 IDE 中安装 Lombok 插件才能正常使用。
不可变性: Record 是不可变的数据对象,一旦创建后,其属性值是无法更改的。而使用 Lombok 的 @Data 注解生成的类默认是可变的,可以通过 setter 方法修改属性值。
自动生成的方法: Record 自动生成的方法包括构造函数、getter、equals、hashCode 和 toString。而使用 Lombok 的 @Data 注解生成的类默认会生成 getter、setter、equals、hashCode 和 toString 方法,但可以通过其他注解来控制生成的方法。
语法差异: Record 的语法相对简洁,使用关键字 record 定义数据对象。而使用 Lombok 的 @Data 注解需要在类上标注注解,并通过 IDE 或构建工具支持来生成相应的方法。
还是要根据需要再去选择~
六、实现接口
public record ProductRecord(String id,String name,Integer qty) implements PrintInterface{
@Override
public void print() {
String productDesc = String.join("-", id, name, qty.toString());
System.out.println(productDesc);
}
public static void main(String[] args) {
ProductRecord productRecord = new ProductRecord("1", "华为手机", 200);
productRecord.print();
}
}
七、Local Record
当然,还可以作为本地对象使用。
比如这个样子啦
package com.example.demo;
public class LocalRecord {
public static void main(String[] args) {
// 定义
record SaleRecord(String saleId,String productName,Double money){ }
// 创建
SaleRecord record = new SaleRecord("1", "手机", 3500.00);
System.out.println(record);
}
}
八、嵌套Record
九、instanceof 判断Record
十、总结
定义:Record 是一个类声明,用于定义不可变的数据对象。
不可变性:Record 的实例是不可变的,即一旦创建,就不能修改其状态。
属性自动声明:在 Record 中,可以使用简洁的语法声明属性,它们会自动生成私有的 final 字段、构造函数、访问方法和 equals()/hashCode()/toString() 方法。
默认实现:Record 默认提供了一些方法的实现,如 equals()、hashCode() 和 toString(),它们会根据属性的值生成对应的逻辑。
构造函数:Record 自动生成一个公共的构造函数,用于初始化属性值。
继承和接口:Record 可以继承其他类和实现接口,但必须在 Record 类声明的开头位置。
可变字段:除了属性字段外,Record 还可以包含其他可变字段,但它们不会影响 Record 的不可变性。
模式匹配:Record 可以与模式匹配结合使用,方便地进行数据提取和条件判断。
总的来说,Record 提供了一种简洁、安全且易用的方式来定义不可变的数据类。它可以减少样板代码,提高代码的可读性和可维护性,并且通过自动化的代码生成和默认实现~
ok那就先这样~