packagecom.scl.j2se.reflectjavabean;importjava.lang.reflect.Field;importjava.lang.reflect.Method;/************************************************************************
* 版 本 号 : v1.0.0.0
* 作 者 : suncl
* 创建时间 : 2015年9月3日
* 更新时间 : 2015年9月3日
* 项目名称 : ReflectPerson.java
* 说 明 : 学习内容
* 总 结 :
* 1. 获取类型对象的方法
* 1) 使用类的class属性 .class
* Class> classType = Person.class;
* 2) 已知类对象,使用对象的实例方法getClass(),返回运行时的对象类型
* Person p = new Person();
* p.getClass();
* 3) 使用Class类的静态方法forName()
* Class> classType = Class.forName("com.scl.j2se.reflectjavabean.Person");
* 2. getDeclaredFields(),getDeclaredMethods()方法返回了类所定义的所有已声明的属性对象和方法对象
* 包含"私有"的.要对私有方法及字段进行操作,需要使用setAccessible(true);
*
************************************************************************
* Copyright @ suncl 2013 . All rights reserved.
************************************************************************/
public classReflectPerson
{public static void main(String[] args) throwsException
{
Person myPerson= newPerson();
myPerson.setEmail("xxx@163.com");
myPerson.setName("Lee Ming");
myPerson.setPassword("214");
Person copyPerson=(Person) copyMyObject(myPerson);
System.out.println("copyPerson name:" + copyPerson.getName() + ",password:" + copyPerson.getPassword() + ",email:" +copyPerson.getEmail());
}//使用反射拷贝对象
public static Object copyMyObject(Object obj) throwsException
{//获取类型对象
Class> classType =obj.getClass();//System.out.println(classType.getName());//通过构造方法创建被反射的类型
Object object =classType.getConstructor().newInstance();
Field[] fields=classType.getDeclaredFields();for(Field field : fields)
{//获取所有属性的访问权限
field.setAccessible(true);//获取字段名称,根据字段名称生成对应的方法名,用于反射
String fieldName =field.getName();
String methodName= Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
String getStr= "get" +methodName;
String setStr= "set" +methodName;//调用原对象的get方法为拷贝对象的set方法赋值
Method getMethod =classType.getMethod(getStr);
Method setMethod=classType.getMethod(setStr, field.getType());
Object getMethodResult=getMethod.invoke(obj);//调用set方法把原对象的值复制到拷贝对象
setMethod.invoke(object, getMethodResult);
}returnobject;
}
}