java反射,獲取類物件所有成員變數,從字串呼叫函式
阿新 • • 發佈:2019-01-10
//import java.lang.reflect.Field; /** 獲取Object物件,所有成員變數屬性值 */ public static void getObjAttr(Object obj) { // 獲取物件obj的所有屬性域 Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { // 對於每個屬性,獲取屬性名 String varName = field.getName(); try { boolean access = field.isAccessible(); if(!access) field.setAccessible(true); //從obj中獲取field變數 Object o = field.get(obj); System.out.println("變數: " + varName + " = " + o); if(!access) field.setAccessible(false); } catch (Exception ex) { ex.printStackTrace(); } } }
//import java.lang.reflect.Field; //import java.lang.reflect.Method; /**從字串呼叫函式,Main.pointEvent(int arg) * className = "com.linkstudio.popstar.state.Main" */ public static void _poinrEvent(String className, int arg) { try { Class classT = Class.forName(className); //獲取對應類 Method methodT = classT.getMethod("pointEvent", int.class); //獲取classT中的pointEvent(int arg)函式 Object obj = classT.newInstance(); //建立類物件 methodT.invoke(obj, (Object)arg); //呼叫物件obj的pointEvent方法 } catch(Exception ex){ System.out.println("呼叫類物件中的函式異常!");} }