java_反射实例
java反射(Copy Code)
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 反射 * * @author JiaLong Li * @param <T> 此类所维护的类型 */ public class ReflectionDemo<T> { /** * 得到某个类对象的公共属性 * * @param owner 某个对象 * @param fieldName 字段名 * @return 该字段的值 * @throws Exception */ public Object getProperty (T owner , String fieldName) throws Exception { Class<?> ownerClass = owner.getClass(); Field field = ownerClass.getField(fieldName); return field.get(field); } /** * 返回某个类的静态公共属性的值 * * @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); return field.get(ownerClass); } /** * 执行某个类对象的方法 * * @param owner 类对象 * @param methodName 方法名 * @param args 方法参数(如果没有,则为null) * @return 方法返回值(如果有) * @throws Exception */ public Object invokeMethod (T owner , String methodName , Object [] args) throws Exception { Class<?> ownerClass = owner.getClass(); Class<?> [] argsClass = new Class [args.length]; for (int i = 0 ; i < argsClass.length ; 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 ; i < argsClass.length ; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(MethodName , argsClass); return method.invoke(null , args); } /** * 新建某个类的实例 * * @param className 类名 * @param args 类的构造函数的参数(如果么有,则为null) * @return 返回类的实例 * @throws Exception */ @SuppressWarnings("unchecked") public T newInstance (String className , Object [] args) throws Exception { Class<?> newClass = Class.forName(className); Class<?> [] argsClass = new Class [args.length]; for (int i = 0 ; i < argsClass.length ; i++) { argsClass[i] = args[i].getClass(); } Constructor cons = newClass.getConstructor(argsClass); return (T) cons.newInstance(args); } /** * 检查某个对象是不是指定类的实例 * * @param obj 要检查的对象 * @param cls 指定类 * @return 如果 obj 是此类的实例,则返回 true */ public boolean isInstance (T obj , Class<> cls) { return cls.isInstance(obj); } }
转载请注明本文链接。版权所有©2010 李佳龙专栏,保留所有权利。