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 ...
随机推荐
- Linux之vim常用扩展操作
多窗口编辑 批量注释和自定义注释 显示行号 1.多窗口编辑 2.批量注释和自定义注释 3.显示行号(临时生效) 命令行模式下输入: set nu 显示行号 set nonu 不显示行号
- Lightoj1007【欧拉函数-素数表】
基础题. PS:注意unsigned long long; 以及%llu #include<bits/stdc++.h> using namespace std; typedef unsi ...
- tidb 安装deploy-ntp.yml失败,什么原因?
在同步时间服务的时候报错,信息如下.实际上我配置的时间服务器的IP就是如下的10.188.100.103,在 执行$ansible-playbook -i hosts.ini deploy_ntp.y ...
- 洛谷P1220 关路灯(区间dp)
关路灯 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯.为了给村里节 ...
- SequoiaDB培训视频
很久之前录制的SequoiaDB培训视频,现在都放上百度云盘了,感兴趣的同学可以看看. 第一讲:图形界面-安装前准备 链接: https://pan.baidu.com/s/1d2B3qUYqtKrE ...
- 定位之float 同一父元素的float相互影响,float是margin盒子在父元素的padding盒子内
- jsonpath 求和
{ "price": [ 1.0, 2.0 ] } $..price.sum() 以下表达式
- 洛谷2414(构建ac自动机fail树dfs序后遍历Trie树维护bit及询问答案)
要点 这是一道蔡队题,看我标题行事 任意询问y串上有多少个x串,暴力找每个节点是不是结尾肯定是炸的,考虑本质:如果某节点是x的结尾,根据ac自动机的性质,x一定是此(子)串后缀.又有每个Trie节点的 ...
- Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017) B
Arpa is taking a geometry exam. Here is the last problem of the exam. You are given three points a, ...
- Python大战机器学习——基础知识+前两章内容
一 矩阵求导 复杂矩阵问题求导方法:可以从小到大,从scalar到vector再到matrix. x is a column vector, A is a matrix d(A∗x)/dx=A d( ...