- 浏览: 336210 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (169)
- spring (20)
- java (44)
- ibatis (0)
- hibernate (6)
- struts (2)
- javascript (6)
- ajax (1)
- eclipse (4)
- 其他 (10)
- database (17)
- ibatis 分页 (7)
- xml (2)
- pl/sql (6)
- sql (4)
- apache (3)
- oracle (8)
- jdom (1)
- Open ModelSphere (1)
- 线程 (2)
- 多线程 (2)
- 查找文件 (1)
- Comparator (2)
- jxl (2)
- jquery (1)
- Flex (2)
- 非技术 (1)
- mysql (2)
- zxing (1)
- jdbc (1)
- Java内存 (1)
- editplus (1)
- log4j (1)
- sqlserver (2)
- base64 (1)
- Linux (4)
- Shell (2)
- 非技术共享 (1)
- 省市 (1)
- PowerDesigner (3)
- 观察者模式 (2)
- Servlet (1)
- 单点登录 (1)
- IO (1)
- tomcat (1)
- clob (1)
- html (1)
- jsp (2)
- JNative (1)
- WebService (2)
- Highcharts (1)
- Spring Security (1)
- ztree (1)
- Mongodb (3)
- sftp (1)
- SVN (1)
- openSUSE (1)
- Ubuntu (1)
- nio (1)
- springboot (1)
- java8 (1)
最新评论
-
wajjj:
[flash=200,200][url][img][list] ...
【JAVA】读取excel内容(兼容03和07格式) -
xurichusheng:
jjhe369 写道感谢分享!但是发现一个小问题,就是第13, ...
oracle 存储过程分页查询 -
jjhe369:
感谢分享!但是发现一个小问题,就是第13,14行的V_STAR ...
oracle 存储过程分页查询 -
飞天奔月:
为什么不用 Map<String, String> ...
读取.properties的内容,并将内容放入一个Map中 -
xurichusheng:
814687491 写道测试了一下,无法换行!你可以自定义自己 ...
使用google的zxing制作二维码
public class Customer { private Long id; private String name; private int age; public Customer(){} /** * @return 返回 id */ public Long getId() { return id; } /** * @param 对id进行赋值 */ public void setId(Long id) { this.id = id; } /** * @return 返回 name */ public String getName() { return name; } /** * @param 对name进行赋值 */ public void setName(String name) { this.name = name; } /** * @return 返回 age */ public int getAge() { return age; } /** * @param 对age进行赋值 */ public void setAge(int age) { this.age = age; } }
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectTester { /** * @Title: copy * @Description: 根据指定的方法的参数去 构造一个新的对象的拷贝 * @param obj 要拷贝的对象 * @return * @author */ @SuppressWarnings("rawtypes") public Object copy(Object obj) { if (null == obj) { return null; } // 获得对象的类型 Class classType = obj.getClass(); System.out .println("the type of " + obj + " is " + classType.toString()); Object objectCopy = null; try { /* * 通过默认构造方法去创建一个新的对象, * getConstructor的视其参数决定调用哪个构造方法 */ objectCopy = classType.getConstructor(new Class[] {}).newInstance( new Object[] {}); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (Exception ex) { ex.printStackTrace(); } try { // 获得对象的所有属性 Field[] fields = classType.getDeclaredFields(); for (Field field : fields) { // 属性名称 String fieldName = field.getName(); String stringLetter = fieldName.substring(0, 1).toUpperCase(); // 获得相应属性的getXXX和setXXX方法名称 String getName = "get".concat(stringLetter).concat( fieldName.substring(1)); String setName = "set".concat(stringLetter).concat( fieldName.substring(1)); // 获取相应的方法 Method getMethod = classType.getMethod(getName, new Class[] {}); Method setMethod = classType.getMethod(setName, new Class[] { field.getType() }); // 调用源对象的getXXX()方法 Object value = getMethod.invoke(obj, new Object[] {}); // 调用拷贝对象的setXXX()方法 setMethod.invoke(objectCopy, new Object[] { value }); } } catch (NoSuchMethodException ex) { ex.printStackTrace(); } catch (SecurityException ex) { ex.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (Exception ex) { ex.printStackTrace(); } return objectCopy; } }
测试类:
public class Test { /** * @Title: main * @Description: TODO * @param args * @author wenjianhai */ public static void main(String[] args) { Customer customer = new Customer(); customer.setAge(20); customer.setId(1L); customer.setName("test"); // 拷贝后的新对象 Customer customer2 = (Customer) new ReflectTester().copy(customer); System.out.println("id\tname\tage"); if (null != customer2) { System.out.println(customer2.getId() + "\t" + customer2.getName() + "\t" + customer2.getAge()); } System.out.println("customer=" + customer); System.out.println("customer2=" + customer2); } }
测试结果:
the type of com.java.reflect.test1.Customer@d9f9c3 is class com.java.reflect.test1.Customer id name age 1 test 20 customer=com.java.reflect.test1.Customer@d9f9c3 customer2=com.java.reflect.test1.Customer@1a46e30
发表评论
-
mysql树
2019-09-26 08:39 350mysql树 -
【JAVA】组织树
2019-09-04 10:17 978JDK 版本:jdk 1.8 及以上。 1. ... -
多线程多批量插入大数据
2018-10-31 11:19 6343参考 https://blog.csdn.ne ... -
java 7 nio逐行读取文件内容
2015-12-26 23:33 5396nio逐行读取文件内容,使用 java 7. 首先,获取 ... -
java 6 IO读取txt文件内容
2015-12-26 23:24 828逐行读取。 首先获取文件的编码格式; 读取文件内容。 ... -
【JAVA】读取excel内容(兼容03和07格式)
2015-12-21 13:51 2119jar 包: poi-3.13.j ... -
一行代码去除List中的重复数据
2015-12-02 10:52 16261. 核心代码: List<String> ... -
将List中的对象中的字段的重复值删除
2015-12-01 11:10 2635如下面的对象 Subs,如果其属性 startSt 和 e ... -
jdk 官方下载地址
2015-11-06 10:00 1729http://www.oracle.com/techn ... -
jsp页面显示二进制图片
2014-11-05 15:58 40151. DAO层 import java.sql.C ... -
java中使用JNative调用dll方法
2014-03-03 16:02 5214使用JNative调用dll方法, dll 文件名 ... -
Vector排序
2013-05-08 10:17 14431. Vector 默认按元素的添加顺序排序 im ... -
使用观察者模式监听Map值的改变
2013-05-02 16:46 6096观察者(Observer)角色:为所有的具体观察者定 ... -
【转】一个比较快的Base64 编码/解码 算法
2013-03-28 17:50 1632转自: 中国开源社区 最快的 Base64 编码/解 ... -
jdbc 数据库连接池
2012-12-04 16:09 1472注:有些java类是JDK ... -
将查询结果导入excel 中
2012-06-29 11:14 11641. 数据库:oracle 10g2 JDK: ... -
使用Comparator做对象的排序
2012-06-15 18:15 1286之前在面试的时候,人家老是问怎么对对象进行排序。 虽然 ... -
【转】 模拟银行业务调度系统
2012-06-13 15:39 1149转自:CSDN,itm_hadf ... -
HttpClient 代理实例(Get方式) 线程
2012-01-10 14:23 1513使用的jar包: commons-codec-1.4.jar ... -
httpclient资料(自用)
2012-01-10 07:07 1007httpclient资料
相关推荐
NULL 博文链接:https://1064319393.iteye.com/blog/2114611
分享一个使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝 的小程序, http://blog.csdn.net/bluedoctor/article/details/8424510 是原理说明,相信请看链接文章。
BeanUtil属性拷贝工具类,支持基本的javabean属性拷贝,通过java反射和泛型编程实现了list属性拷贝
java反射机制创建对象实现:java 深度拷贝 -超完美,只使反射机制,不使用其它封装好的深度拷贝的工具类
所以使用反射机制来实现。 但是如果是服务端运行的话,还是建议手动的实现。 毕竟反射机制比直接写出来的效率要慢一些。 代码: public static class DeepCopyHelper { public static object Copy(this object...
Collections 类集合实现类特征图 泛形 泛型的使用 用泛型表示类 用泛型表示接口泛型方法 泛型通配符 反射 Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 枚举和普通类-样枚举神秘之处 枚举类 I/O File...
C++语言考查的重点主要有:多继承,抽象类,虚函数,拷贝构造函数,析构函数, 动态联编,多态,const,static。以下是我面试中遇到的问题: 1)你听说过拷贝构造函数吗?能具体说一下它的作用吗?(汉略) 。。。...
反射的原理,反射创建类实例的三种方式是什么? cloneable接口实现原理,浅拷贝or深拷贝 Java NIO使用 hashtable和hashmap的区别及实现原理,hashmap会问到数组索引,hash碰撞怎么解决 arraylist和linke
5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2...
5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2...
5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2接口与抽象...
5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2...
5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2...
5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 5.5.4使用反射编写通用的数组代码 5.5.5方法指针 5.6枚举类 5.7继承设计技巧 第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2...
UseCopyToTable 演示通过LINQ查询在DataTable之间拷贝数据。 UseORDesigner 演示对象关系设计器(OR Designer)的使用。 UseDataContextLINQ 演示通过DataContext进行数据绑定和访问。 UseDataView 演示...
基本控制流程类似Struts,但业务控制类(Action)不须要实现任务接口,表单收集类也不须实现任何接口(框架中大量用到反射机制),从而不用从ActionForm拷贝属性到实体Bean直接做为DTO向下层传递。 想自己写Web框架的...
接口和抽象类的区别,使用场景 类的实例化顺序,当new执行的时候,父类静态数据,父类构造函数,字段,子类静态数据,子类的构造函数怎么执行的 继承和聚合的区别 final的用途 深拷贝,浅拷贝的区别 自动装箱拆箱 ...