本帖最后由 罗全涛 于 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;
}
好了,希望对你理解上有用 |