
文章目錄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 上的最大區別。