1. 程式人生 > >java反射,獲取類物件所有成員變數,從字串呼叫函式

java反射,獲取類物件所有成員變數,從字串呼叫函式

//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("呼叫類物件中的函式異常!");}
}