package com.zj.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 功能:用反射实现拷贝对象
* @author zhengjiong
* time:2011-9-17 19:37:46
*/
public class ReflectTest4
{
public static void main(String[] args) throws Exception
{
ReflectTest4 rf = new ReflectTest4();
People p1 = new People("zhangsn", 15);
//执行拷贝
People p2 = (People)rf.copy(p1);
System.out.println(p2.getName() + " , " + p2.getAge());
}
private Object copy(Object p1) throws Exception
{
Class<?> classType = p1.getClass();
//获得所有属性
Field[] fields = classType.getDeclaredFields();
//获得People的实例
Object p2 = classType.newInstance();
for(int i = 0; i < fields.length; i++){
String methodName = fields[i].getName();
String firstLetter = methodName.substring(0, 1).toUpperCase();
//获得set,get方法名
String getMethodName = "get" + firstLetter + methodName.substring(1);
String setMethodName = "set" + firstLetter + methodName.substring(1);
//获得People类每个属性的set,get方法
Method getMethod = classType.getMethod(getMethodName, new Class<?>[]{});
Method setMethod = classType.getMethod(setMethodName, new Class<?>[]{fields[i].getType()});
//调用p1对象的get方法获得值
Object value = getMethod.invoke(p1, new Object[]{});
//把获得的值传给p2的set方法
setMethod.invoke(p2, new Object[]{value});
}
return p2;
}
}
class People{
private String name;
private int age;
public People(){}
public People(String name, int age){
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
}
分享到:
相关推荐
对多维数组,对象,进行去重,相同的值只保留一个,常见的new Set()和filter,只能去重一维数组,并不能进行深层的去重,逻辑:判断是否为对象,为对象判断是否为数组或是真的对象,递归一直筛选为值,判断首次...
前端面试相关-深拷贝和浅拷贝的实现方法和区别
这是一款很好用的复制和移动软件----光速拷贝工具
03-深拷贝与浅拷贝
可以帮你保护PDF文档里的所有单词和图形不被别人辅助,而无需更改原始内容,处理后的pdf文件可以由任何pdf阅读器打开和查看,就是无法复制与拷贝,专业的解锁工具也无法解锁,特别适合一些特殊的使用场景,需要的...
行业分类-电子-Nand-flash烧录拷贝电路及Nand-flash烧录设备的说明分析.rar
对Python中列表和数组的赋值 中 ,浅拷贝和深拷贝的实例讲解 浅 引⽤: 列表赋值: 1234567>>> a = [1, 2, 3] >>> b = a >>> print...b指向这个新的内存区域,因此改变a所指向的对象的值,不会影响b 列表深拷贝和浅拷贝
14 - JavaScript 引用和值拷贝.rar
分享一个使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝 的小程序, http://blog.csdn.net/bluedoctor/article/details/8424510 是原理说明,相信请看链接文章。
数据结构算法电子书 图书原版复印 适合软件专业学生 以及 noi竞赛学生使用
屏幕适配解决方案-全部适配,解压拷贝即可用
第4讲-导数与一元微分 拷贝.pdf
第13讲-方向导数与梯度 拷贝.pdf
C#基于表达式(Expression)实现对象深拷贝,包含了核心类及示例数据。这是一个比较简单的帮助类,可作学习参考
js代码-手写代码练习---深拷贝 支持Data, Regexp,Function, 爆栈问题 , 循环引用问题
精品软件工具--Hackintosh三码拷贝工具 所谓三码就是ROM,序列号,以及系统UUID这三者,用于提供身份令牌
系统工具-文件下载-SlySoft CloneBD(光盘拷贝软件) 1.2.5.zip
行业分类-设备装置-一种写时拷贝快照方法和系统
深拷贝会把对象里所有的数据重新复制到新的内存空间,是最彻底的拷贝。浅拷贝的实现方式用 for in 实现浅拷贝(比较繁琐)// 当修改 obj1 的第二层数据时
1、实现文件夹创建、删除、进入。 2、实现当前文件夹下的内容罗列。 3、实现文件拷贝和文件夹拷贝(文件夹拷贝指深度拷贝,包括所有子目录和文件)。 4、实现指定文件的加密和解密。