package oop; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * @author zikui * */ public class ReflectionUtil { /* * 得到某个对象的属性 */ public Object getProperty(Object owner, String fieldName) { Class clazz = owner.getClass(); Field field = null; Object fieldValue = null; try { field = clazz.getField(fieldName); fieldValue = field.get(owner); } catch (Exception e) { e.printStackTrace(); } return fieldValue; } /* * 得到某个类的静态属性 */ public Object getStaticField(String className, String fieldName) { Class clazz = null; Field field = null; Object fieldValue = null; try { clazz = Class.forName(className); field = clazz.getField(fieldName); fieldValue = field.get(clazz); } catch (Exception e) { e.printStackTrace(); } return fieldValue; } /* * 调用某对象的方法 */ public Object invokeMethod(Object owner, String methodName, Object args[]) { Class clazz = null; Method method = null; Object result = null; clazz = owner.getClass(); Class argsClass[] = new Class[args.length]; for(int i=0; i<args.length; i++) { argsClass[i] = args[i].getClass(); } try { method = clazz.getMethod(methodName, argsClass); result = method.invoke(owner, args); } catch (Exception e) { e.printStackTrace(); } return result; } /* * 调用某个类的静态方法 */ public Object invokeStaticMethod(String className, String methodName, Object[] args) { Class clazz = null; Method method = null; Object result = null; try { clazz = Class.forName(className); Class argsClass[] = new Class[args.length]; for(int i=0; i<args.length; i++) { argsClass[i] = args[i].getClass(); } method = clazz.getMethod(methodName, argsClass); result = method.invoke(clazz, args); //静态方法不依赖某个具体的对象 } catch (Exception e) { e.printStackTrace(); } return result; } /* * 创建某个类的一个新实例 */ public Object newInstance(String className, Object args[]) { Class clazz = null; Constructor cons = null; Object result = null; try { clazz = Class.forName(className); Class argsClass[] = new Class[args.length]; for(int i=0; i<args.length; i++) { argsClass[i] = args[i].getClass(); } cons = clazz.getConstructor(argsClass); result = cons.newInstance(args); } catch (Exception e) { e.printStackTrace(); } return result; } /* * 判断某对象是否为指定类的实例 */ public boolean isInstance(Object obj, Class clazz) { return clazz.isInstance(obj); } /* * 得到数组中的某个元素 */ public Object getFromArray(Object array, int index) { return Array.get(array, index); } }