JAVA反射reflect常用方法
阿新 • • 發佈:2021-10-02
Reflect筆記
基礎
結構資訊
Class c = Class.forname("類的名稱");
從類的名稱建立類物件。class.getName();
獲得類的名稱 會帶上包名,例如com.java.test.App
class.getSimpleName();
獲得類的簡單名稱,例如App
class.getInterfaces();
獲得類的介面,是一個數組,可以通過Arrays.toString()輸出;class.getModifers();
獲得修飾符,得到一個代表修飾符的數字;- 可以通過
Modifier.toString
(數字) 得到字串,如public final
成員變數
Filed[] f = class.getFileds();
獲取所有public
屬性class.getDeclaredFileds()
獲取所有許可權的屬性f.getName
獲得屬性名字f.getType
獲得屬性型別
構造方法
class.getConstructors()
所有構造方法class.getDeclaredConstructors()
所有許可權的構造class.getConstructor()
指定的構造方法class.getDeclaredConstructor()
所有指定構造方法- 通過
constructor.newInstance()
成員方法
getMethods()
獲得所有方法getname();
獲得名字getModifiers();
獲得修飾符getReturnTypes();
獲得返回型別
操作
使用反射操作屬性(不安全)
- 獲取類的完整路徑字串
- 根據類的完整路徑獲得類物件
- 使用
set(obj,值)
進行對相應屬性的修改 f.getXxx(obj)
獲得obj該屬性的值
使用Method執行方法
m.invoke(obj)
具有返回值
invoke
簡單點來說,就是將一個方法(method
)運用到具體的類上
比如我有一個類Person
,中間有屬性age
得到Person
的getAge
方法後
使用f.invoke(person_1,Object[])