首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 泛型方法 與反射 Field.get(obj) 詳解

     編輯:程式設計疑難解答

代碼中兩個疑問:

1. 方法上定義泛型 的意義

public static  void outExcel(List list) { ... }
  • 類級泛型適用於整個類的多個方法/字段;方法級泛型僅限本方法使用,不污染類簽名。
  • 這裡 T 僅用於參數 List 及內部變量,類本身無需泛化,方法級更精準。

2. 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))。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved