代碼中兩個疑問:
public static void outExcel(List list) { ... }
T 僅用於參數 List 及內部變量,類本身無需泛化,方法級更精準。Field.get(obj) 為什鎱能取到屬性值?T t = list.get(i); // 具體對象(如 Emp 實例)
Field[] fields = t.getClass().getFields(); // 獲取 public 字段
for (Field field : fields) {
Object value = field.get(t); // 相當於 t.fieldName
}
Field 對象代表類的元數據(字段名、類型、修飾符等)。field.get(obj) 內部通過 native 代碼直接讀取 obj 記憶體偏移量處的值,等價於直接訪問字段,但繞過編譯期訪問檢查(需 setAccessible(true) 訪問 private)。getFields() 只獲取 public 字段(含父類),getDeclaredFields() 獲取本類聲明的所有字段(需 setAccessible(true))。