公司动态

494. Java 反射 - 使用 Record 的反射操作

📅 2026/8/14 21:31:08
494. Java 反射 - 使用 Record 的反射操作
文章目录494. Java 反射 - 使用 Record 的反射操作1. 判断一个类是否是 Record示例Point 记录类2. 学员需要注意的要点3. 检查多个类4. 小结494. Java 反射 - 使用 Record 的反射操作Record是 Java SE 16 引入的一种特殊类用于简洁地表示不可变数据载体。它和普通类最大的区别在于字段是 final 且自动生成构造器、equals、hashCode 和 toString引入了 record component记录组件的概念这些特性也影响了 Reflection API 的使用方式。1. 判断一个类是否是 Record从 Java 16 开始Class类新增了一个方法booleanisRecord()用来检查某个类是否为record类型。示例Point 记录类publicrecordPoint(intx,inty){publicPoint(){this(0,0);}}使用反射检查Class?c1String.class;Class?c2Point.class;System.out.println(Is c1.getSimpleName() a record class? c1.isRecord());System.out.println(Is c2.getSimpleName() a record class? c2.isRecord());输出结果IsStringarecordclass?falseIsPointarecordclass?true2. 学员需要注意的要点✅普通类如String返回false因为它是传统的 class。✅Record 类返回true因为它在字节码层面有特殊的标记Class.isRecord()就是基于这个信息判断的。匿名类、内部类不会被视为 Record除非显式声明为record。3. 检查多个类recordPerson(Stringname,intage){}classCar{Stringbrand;}publicclassRecordDemo{publicstaticvoidmain(String[]args){System.out.println(Person.class.isRecord());// trueSystem.out.println(Car.class.isRecord());// false}}输出truefalse4. 小结Record 是一种特殊的 classJava 16 引入适合存储不可变数据。反射 API 新增了Class.isRecord()用来判断某个类是否是 Record 类型。在后续的学习中我们还会看到如何通过反射获取record components这才是 records 与普通类在反射 API 上的最大区别。