| 本帖最后由 罗全涛 于 2012-1-1 15:12 编辑 
 一句一句看吧
 public class ReflectTest6
 {
 public Object copyPerson(Object object) throws Exception
 {
 //通过对象的getClass()函数反射获得对应类的class实例对象,
 Class<?> classType=object.getClass();
 //调用class自带的newInstance函数获取传入对象的类的无参构造方法(内部实现),
 //并通过这个无参构造方法获取传入对象的类的实例
 Object  objectClass1=classType.newInstance();
 //此次调用class实例的getConstructor(new Class[]{})方法获取带参数的构造函数,
 //与上面获取无参的相对应
 Constructor<?> con=classType.getConstructor(new Class[]{});
 //调用有参数的构造函数创建实例对象
 Object bojectClass2=con.newInstance(new Object[]{});
 //获得对象的所用以声明的成员变量:包括private的
 Field[] fields=classType.getDeclaredFields();
 //增强型for循环,进行遍历
 for(Field field:fields)
 {
 //返回字段名称
 String name=field.getName();
 //截断字符串,并将其全部转成大写形式
 String firstletter=name.substring(0,1).toUpperCase();
 
 String getMethodName="get"+firstletter+name.substring(1,name.length());
 
 String setMethodName="set"+firstletter+name.substring(1,name.length());
 //通过发射获取成员方法,参数为方法名、参数数组,JDK1.6后参数数据变成可变参数
 Method  getMethod=classType.getMethod(getMethodName, new Class[]{});
 //同上
 Method setMethod=classType.getMethod(setMethodName, new Class[]{field.getType()});
 //调用方法实例(对象)的方法,invoke翻译过来是调用,请求。参数为调用它的对象object, 、参数列表new Object[]{}
 //参数列表new Object[]{}为Object类型,如果传入的是基本数据类型,会自动进行装箱操作,
 Object  value=getMethod.invoke(object, new Object[]{});
 //同上
 setMethod.invoke(objectClass1, new Object[]{value});
 
 
 }
 
 return objectClass1;
 
 }
 好了,希望对你理解上有用
 |