Java反射工具類
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class 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; } /** * 得到某類的靜態公共屬性 * * @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; } /** * 執行某對象方法 * * @param owner * 對象 * @param methodName * 方法名 * @param args * 參數 * @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); } /** * 執行某類的靜態方法 * * @param className * 類名 * @param methodName * 方法名 * @param args * 參數數組 * @return 執行方法返回的結果 * @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 構造函數的參數 * 如果無構造參數,args 填寫為 null * @return 新建的實例 * @throws Exception */ public Object newInstance(String className, Object[] args,Class[] argsType) throws NoSuchMethodException, SecurityException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class newoneClass = Class.forName(className); if(args == null){ return newoneClass.newInstance(); }else{ // 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); Constructor cons = newoneClass.getConstructor(argsType); return cons.newInstance(args); } } /** * 是不是某個類的實例 * @param obj 實例 * @param cls 類 * @return 如果 obj 是此類的實例,則返回 true */ public boolean isInstance(Object obj, Class cls) { return cls.isInstance(obj); } /** * 得到數組中的某個元素 * @param array 數組 * @param index 索引 * @return 返回指定數組對象中索引組件的值 */ public Object getByArray(Object array, int index) { return Array.get(array,index); } public Class<?> GetClassListByPackage(String pPackage) { Package _Package = Package.getPackage(pPackage); Class<?> _List = _Package.getClass(); return _List; } } </pre>
本文由用戶 f25p 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!