java 对象复制字段_Java 使用反射拷贝对象一般字段值

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值