http://www.duduwolf.com/wiki/2006/85.html[@more@]import java.lang.reflect.Array;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;
/**
* Java Reflection Cookbook
*
*@author Michael Lee
*@since 2006-8-23
*@version 0.1a
*/
publicclass Reflection {
/**
* 得到某個對象的公共屬性
*
*@param owner, fieldName
*@return 該屬性對象
*@throws Exception
*
*/
public Object getProperty(Object owner, String fieldName)throws Exception {
Class ownerClass= owner.getClass();
Field field= ownerClass.getField(fieldName);
Object property= field.get(owner);
return property;
}
/**
* 得到某類的靜態(tài)公共屬性
*
*@param className 類名
*@param fieldName 屬性名
*@return 該屬性對象
*@throws Exception
*/
public Object getStaticProperty(String className, String fieldName)
throws Exception {
Class ownerClass= Class.forName(className);
Field field= ownerClass.getField(fieldName);
Object property= field.get(ownerClass);
return property;
}
/**
* 執(zhí)行某對象方法
*
*@param owner
* 對象
*@param methodName
* 方法名
*@param args
* 參數(shù)
*@return 方法返回值
*@throws Exception
*/
public Object invokeMethod(Object owner, String methodName, Object[] args)
throws Exception {
Class ownerClass= owner.getClass();
Class[] argsClass=new Class[args.length];
for (int i=0, j= args.length; i< j; i++) {
argsClass[i]= args[i].getClass();
}
Method method= ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
/**
* 執(zhí)行某類的靜態(tài)方法
*
*@param className
* 類名
*@param methodName
* 方法名
*@param args
* 參數(shù)數(shù)組
*@return 執(zhí)行方法返回的結(jié)果
*@throws Exception
*/
public Object invokeStaticMethod(String className, String methodName,
Object[] args)throws Exception {
Class ownerClass= Class.forName(className);
Class[] argsClass=new Class[args.length];
for (int i=0, j= args.length; i< j; i++) {
argsClass[i]= args[i].getClass();
}
Method method= ownerClass.getMethod(methodName, argsClass);
return method.invoke(null, args);
}
/**
* 新建實例
*
*@param className
* 類名
*@param args
* 構造函數(shù)的參數(shù)
*@return 新建的實例
*@throws Exception
*/
public Object newInstance(String className, Object[] args)throws Exception {
Class newoneClass= Class.forName(className);
Class[] argsClass=new Class[args.length];
for (int i=0, j= args.length; i< j; i++) {
argsClass[i]= args[i].getClass();
}
Constructor cons= newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}
/**
* 是不是某個類的實例
*@param obj 實例
*@param cls 類
*@return 如果 obj 是此類的實例,則返回 true
*/
publicboolean isInstance(Object obj, Class cls) {
return cls.isInstance(obj);
}
/**
* 得到數(shù)組中的某個元素
*@param array 數(shù)組
*@param index 索引
*@return 返回指定數(shù)組對象中索引組件的值
*/
public Object getByArray(Object array,int index) {
return Array.get(array,index);
}
}
本文標題:Java反射經(jīng)典實例JavaReflectionCookbook
網(wǎng)頁路徑:
http://m.jiaotiyi.com/article/ppgdjh.html