Java record类用法简介

参考资料

  1. Java 16 新特性:record类
  2. 新特性Record最全用法总结—动力节点总结
  3. Javaのレコードクラス
  4. 从头学Java17-Stream API(二)结合Record、Optional


一. 介绍

  • 是一种特殊的java类,在Java16中正式出现,用于创建一个不可变的类。该类一经创建并赋值后,就不可再改变了。
  • 类以及所有的属性都是final修饰的, Record类不能被继承。
  • 可用于创建一个简单的数据传输对象(DTO),用来传输数据。
  • record类会自动生成,全参构造方法,hashCode()方法,equals()方法,toString()方法和用来获取数据的方法。
  • 注意,在record类对象创建后,只能get数据,无法set数据,这一点和普通的POJP不同。
  • 在只读取数据的场景中,可以代替lombok

二. 基本语法

  • 支持实现接口,不支持继承
  • 支持静态变量,静态代码块,静态方法
  • 支持注解
  • 不支持成员变量和初始化代码块
  • 可内部嵌套record,嵌套的record是static状态的
    • 内部record只能访问外部record的静态方法和变量
  • 可通过反射来获取record的信息

⏹基本构造示例

在这里插入图片描述


三. 各种特性示例

3.1 准备

⏹接口

public interface S002Api {
   

	Map<String, String> getS001Data();
}

⏹创建一个record类,该类有内部record类,并且实现了接口

import java.util.List;
import java.util.Map;
import org.springframework.util.ObjectUtils;

public record StudentRecord(Integer id, String name, List<String> addressList) implements S002Api {
   
	
	// 静态变量
	public static Integer money;
	
	// 只允许静态变量,成员变量变量会报错
	// String food = "汉堡";
	
	// 不支持初始化代码块
	/* 
	  {
		
	  }
	*/
	
	// 静态代码块
	static {
   
		money = 100;
	}
	
	// 构造方法的简单写法,若在赋值时,不需要进行二次数据处理,可以简化为下面这种写法
	// record会给我们自动赋值
	public StudentRecord {
   
		
		// 在构造对象时,对数据进行校验
		if (ObjectUtils.isEmpty(addressList)) {
   
			throw new RuntimeException("addressList不能为空");
		}
	}

	// 静态方法
	public static void printMsg1() {
   
		System.out.println("Hello world! printMsg1");
	}
	
	// 非静态方法
	public void printMsg2() {
   
		System.out.println("Hello world! printMsg2");
	}
	
	// 实现接口中的方法
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值