反射demo(拷贝一个对象)
经过了上一次对反射的初步认知,最近又接触到了后,做了一个小demo,感觉这次带了一点理解去做的,比第一次接触反射好了许多。
上次学习的链接,有一些反射用的基础语句。https://www.cnblogs.com/deepSleeping/p/9381785.html
package deep.blob.test; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import org.junit.Test; import deep.blob.entity.Employee; public class demo { @Test
public void fun(){
Employee emp = new Employee();
emp.setId("1001");
emp.setName("张三");
emp.setGender("男");
emp.setAge(21); cloneEmp(emp);
} private Object cloneEmp(Object emp) {
//1.获得需要克隆的类的class对象
Class<?> clazz = emp.getClass(); //2.获得所有属性
Field[] fields = clazz.getDeclaredFields(); //3.定义被克隆的对象
Object newInstance = null;
try {
newInstance = clazz.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //4.遍历所有的属性并获得值
for(Field field : fields){
try {
if (!field.getName().equals("serialVersionUID")) {
//设置可以访问private的属性
field.setAccessible(true); //获取克隆对象的对应属性的值并赋值给被克隆对象的对应属性名的属性
field.set(newInstance, field.get(emp));
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } Method method = null;
try {
method = clazz.getMethod("toString");
System.out.println(method.invoke(newInstance));
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return newInstance; }
}
package deep.blob.entity; import java.io.Serializable; /**
* 员工实体类
* @author DeepSleeping
*
*/
public class Employee implements Serializable{ private static final long serialVersionUID = 1L; private String id;
private String name;
private String gender;
private Integer age; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return this.getId() + ":" + this.getName();
} }

反射demo(拷贝一个对象)的更多相关文章
- C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)
		
from:https://blog.csdn.net/poxiaohai2011/article/details/27555951 //C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西 ...
 - Python里面如何拷贝一个对象
		
1.赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个. In [168]: a Out[168]: [1, 2, 3] In [169]: b=a In [170]: a ...
 - Java_反射demo
		
package com.cnit.reflect; import java.lang.reflect.Field; import java.lang.reflect.Method; public cl ...
 - python里面如何拷贝一个对象,deecopy和copy的区别
		
copy仅拷贝对象的本身,而不拷贝对象引用的其它对象. deecopy除拷贝对象本身,而拷贝对象引用的其它对象.
 - python里面如何拷贝一个对象?deepcopy 和 copy 有什么区别 ?
		
深拷贝就是说原内容改变但是拷贝的性内容不会改变,copy.copy和deepcopy对一个不可变类型进行拷贝, name结果相同都是浅拷贝指向引用如果是可变的话, 即使元组在最外层, 那么deepco ...
 - Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)
		
答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个. 浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改 ...
 - Java反射之方法反射demo
		
package reflect; import java.lang.reflect.Method; public class ClassDemo3 { public static void main( ...
 - [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法
		
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...
 - Python里面如何拷贝一个对象?
		
import copy lst=[1,2,3,4,[1,2]] # 复制列表lst,命名lst2 lst2=copy.copy(lst) print(f'这是lst3:{lst2}') # 深拷贝 l ...
 
随机推荐
- MySQL-5.7.19 在阿里云 CentOS-7.0 上的安装
			
工具准备 查看系统是否安装了yum工具: [root@wangbo srv]# rpm -qa | grep yum yum-metadata-parser-1.1.4-10.el7.x86_64 y ...
 - C 单向链表就地逆转
			
1.问题描述 给定一个单链表L,设计函数Reverse将L就地逆转.即不需要申请新的节点,将第一个节点转换为最后一个结点,第二个节点转换为倒数第二个结点,以此类推. 2.思路分析 循环处理整个链表.将 ...
 - Nginx+tomcat集群使用redis共享session
			
一 :nginx负载均衡 当Tomcat当做独立的Servlet容器来运行时,可看做是能运行Java Servlet的独立Web服务器. 此外 Tomcat还可以作为其他Web服务器进程内或者进程外的 ...
 - eclipse如何使用log4j详解,你get了吗???
			
1.下载log4j jar包 log4j下载地址 http://logging.apache.org/log4j/2.x/download.html 2.log4j jar包引入项目 接下来 ...
 - 解决Database returned an invalid datetime value. Are time zone definitions for your database installed?
			
设定博客文章按照时间分层筛选出现问题 ret=Article.objects.filter(user=user).annotate(month=TruncMonth("create_time ...
 - 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)
			
转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html 接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...
 - sql server 索引阐述系列七 索引填充因子与碎片
			
一.概述 索引填充因子作用:提供填充因子选项是为了优化索引数据存储和性能. 当创建或重新生成索引时,填充因子的值可确定每个叶级页上要填充数据的空间百分比,以便在每一页上保留一些剩余存储空间作为以后扩展 ...
 - git版本管理规范
			
一.基本开发流程: 二.分支命名 2.1主分支 ① master :随时可供在生产环境中部署的代码 ② dev: 保存当前稳定并且最新的开发分支(多人开发同一分支) 2.2辅助分支 主要用于新功能的并 ...
 - 一篇文章让你成为 NIO 大师 - MyCAT通信模型
			
这篇文章没有详细介绍 NIO 的概念,对于 NIO 不了解的同学,可根据自己需要,阅读这篇介绍 NIO 的博客 io.mycat.net.NIOAcceptor NIOAcceptor负责处理客 ...
 - 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程
			
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...