2018.5.11 Java利用反射实现对象克隆
package com.lanqiao.demo;
/**
* 创建人
* @author qichunlin
*
*/
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//有参构造方法
public Person(String name,int id) {
super();
this.id = id;
this.name = name;
}
//无参构造方法
public Person() {
super();
// TODO Auto-generated constructor stub
}
}
package com.lanqiao.demo;
/**
* 复制对象
* @author qichunlin
*
*/
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectPerson {
public Object copy(Object object) throws Exception{
//加载类
Class c = object.getClass();
//获取类中的构造方法
Constructor ct = c.getConstructor(new Class[] {});
//在构造方法中传值
Object obj = ct.newInstance(new Object[] {});
//获取所有 属性 返回数组
Field[] f = c.getDeclaredFields();
for(Field field : f) {
String name = field.getName();
//System.out.println("a"+name);
//截取
String firstLetter = name.substring(0, 1).toUpperCase();
String getMethodName = "get"+firstLetter+name.substring(1);
String setMethodName = "set"+firstLetter+name.substring(1);
//获取无参构造方法
Method getMethod = c.getMethod(getMethodName, new Class[] {});
Method setMethod = c.getMethod(setMethodName, new Class[] {field.getType()});
//执行赋值无参构造方法
Object value = getMethod.invoke(object, new Object[] {});
System.out.println(value);
//执行赋值有参构造方法
setMethod.invoke(obj, new Object[] {value});
}
return obj;
}
}
package com.lanqiao.demo;
import java.lang.reflect.InvocationTargetException;
/**
* @author qichunlin
*
*/
public class Test {
public static void main(String[] args) throws Exception,InvocationTargetException{
ReflectPerson rp = new ReflectPerson();
Person p = new Person("Legend",22);
Person obj = (Person)rp.copy(p);
System.out.println(obj.getName()+"\t"+obj.getId());
}
}
2018.5.11 Java利用反射实现对象克隆的更多相关文章
- java利用反射获取对象前后修改的内容(用于日志记录)
import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...
- java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值
1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...
- .NET 利用反射将对象数据添加到数据库
.NET 利用反射将对象数据添加到数据库 一些小型的项目,在不使用其他的框架(LINQ,NHibernate,EF等等框架)的前提下,这时候一些反复的增删改查就会让我们感到极其的繁琐,厌烦,为了避 ...
- 【转】Java利用反射机制访问私有化构造器
Java利用反射机制访问私有化构造器 博客分类: java 我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有 ...
- java利用反射调用类的某个方法
java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...
- java利用反射获取类的属性及类型
java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...
- C#利用反射来判断对象是否包含某个属性的实现方法
本文实例展示了C#利用反射来判断对象是否包含某个属性的实现方法,对于C#程序设计人员来说有一定的学习借鉴价值. 具体实现代码如下: /// <summary> /// 利用反射来判断对象是 ...
- tp 框架 利用反射实现对象调用方法
<?php class Person{ public $name="xiaoming"; function say(){ echo "i am ".$th ...
- java利用反射交换两个对象中的字段相同的字段值
有时候我们的两个对象字段都是一样的,只有极少的区别,想要把一个对象字段的值,赋值给另外一个对象值 然后传给另外一个方法使用,但是这个字段太多,一个一个的复制太过繁琐. 这时候利用反射解决这个问题. c ...
随机推荐
- sqlserver2012——逻辑运算符
ALL 如果一组的比较都为TRUE,则结果为true ANY如果玉足比较中任何一个为true,则结果为true AND 两个boll都为TRUE,则结果为TRUE OR 两个BOLL任何一个TRUE, ...
- js 常用排序
1. 冒泡排序 原理:从第一个元素开始,把当前元素和下一个索引元素进行比较.如果当前元素大,那么就交换位置,重复操作直到比较到最后一个元素 function bubbleSort(arr) { if ...
- [UE4]C++实现动态加载的问题:LoadClass()和LoadObject()
http://aigo.iteye.com/blog/2281558 原文作者:@玄冬Wong 相关内容:C++静态加载问题:ConstructorHelpers::FClassFinder()和FO ...
- PHP操作Redis常用技巧总结【转】
一.Redis连接与认证 //连接参数:ip.端口.连接超时时间,连接成功返回true,否则返回false $ret = $redis->connect('127.0.0.1', 6379, 3 ...
- 洛谷P3004 [USACO10DEC]宝箱Treasure Chest
P3004 [USACO10DEC]宝箱Treasure Chest 题目描述 Bessie and Bonnie have found a treasure chest full of marvel ...
- MySQL下载与安装配置
一.Windows 上安装 MySQL Windows 上安装 MySQL 相对简单,最新版本下载地址: 官网:https://dev.mysql.com/downloads/mysql/ 下载步骤: ...
- 通过node.js读取html页面及其页面中引入的css样式
Node 是什么? Node 是一个基于Chrome V8 引擎的JavaScript 运行环境. Node 不是一种独立的语言.Node不是 JavaScript 框架, Node是一个除了浏览器之 ...
- 关于表格——增加删除行,鼠标选定(利用JavaScript)
涉及到的知识点: 1.onmouseover,onmouseout 2.dom getElementByTagName 3.新建节点元素createElement; <!DOCTYPE html ...
- 对于BeanUtils类的方法populate的一些个人拙见
今天在做一个登录案列,期间涉及到了BeanUtils类,这个类也是第一次涉及到,视频没有细讲.只能自己摸着石头过河.慢慢思考.下面来说一下自己个人对这个类的方法populate的理解 这个类应该不是单 ...
- 新的JSON / YAML插件:在JMeter中使用YAML
在JMS插件从jmeter-plugins.org捐赠给核心JMeter之后,JSON插件在Apache JMeter™版本4中被弃用.现在,我已更新此插件以支持新功能和新功能.在这个新版本中,两个插 ...