- 浏览: 346158 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (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 422mysql树 -
【JAVA】组织树
2019-09-04 10:17 1054JDK 版本:jdk 1.8 及以上。 1. ... -
多线程多批量插入大数据
2018-10-31 11:19 6413参考 https://blog.csdn.ne ... -
java 7 nio逐行读取文件内容
2015-12-26 23:33 5464nio逐行读取文件内容,使用 java 7. 首先,获取 ... -
java 6 IO读取txt文件内容
2015-12-26 23:24 883逐行读取。 首先获取文件的编码格式; 读取文件内容。 ... -
【JAVA】读取excel内容(兼容03和07格式)
2015-12-21 13:51 2184jar 包: poi-3.13.j ... -
一行代码去除List中的重复数据
2015-12-02 10:52 16741. 核心代码: List<String> ... -
将List中的对象中的字段的重复值删除
2015-12-01 11:10 2709如下面的对象 Subs,如果其属性 startSt 和 e ... -
jdk 官方下载地址
2015-11-06 10:00 1865http://www.oracle.com/techn ... -
jsp页面显示二进制图片
2014-11-05 15:58 40861. DAO层 import java.sql.C ... -
java中使用JNative调用dll方法
2014-03-03 16:02 5344使用JNative调用dll方法, dll 文件名 ... -
Vector排序
2013-05-08 10:17 15421. Vector 默认按元素的添加顺序排序 im ... -
使用观察者模式监听Map值的改变
2013-05-02 16:46 6212观察者(Observer)角色:为所有的具体观察者定 ... -
【转】一个比较快的Base64 编码/解码 算法
2013-03-28 17:50 1729转自: 中国开源社区 最快的 Base64 编码/解 ... -
jdbc 数据库连接池
2012-12-04 16:09 1519注:有些java类是JDK ... -
将查询结果导入excel 中
2012-06-29 11:14 12141. 数据库:oracle 10g2 JDK: ... -
使用Comparator做对象的排序
2012-06-15 18:15 1339之前在面试的时候,人家老是问怎么对对象进行排序。 虽然 ... -
【转】 模拟银行业务调度系统
2012-06-13 15:39 1212转自:CSDN,itm_hadf ... -
HttpClient 代理实例(Get方式) 线程
2012-01-10 14:23 1556使用的jar包: commons-codec-1.4.jar ... -
httpclient资料(自用)
2012-01-10 07:07 1091httpclient资料
相关推荐
这个例子展示了如何使用反射实现一个通用的深拷贝方法。但需要注意的是,这种方法对类的结构有一定限制,比如不能处理循环引用,也不能处理无法序列化的对象。此外,为了提高性能,实际应用中可以考虑使用序列化或...
标题中的“通过构造及反射实现类属性赋值”涉及到的技术是Java的构造函数和反射机制。这两种方法在特定场景下能帮助我们更灵活、更深入地处理对象属性的复制。 首先,构造函数是创建新对象时调用的特殊方法,它可以...
本篇文章将探讨如何利用反射技术实现POJO(Plain Old Java Object)值的拷贝,这对于数据传输、对象复制等场景非常有用。 POJO是一个简单的Java对象,没有特定的框架限制,通常包含一组属性和对应的getter/setter...
以上就是关于“反射拷贝属性”的基本原理和实现步骤。在实际开发中,也可以使用一些现成的库,如Apache Commons BeanUtils的`BeanUtils.copyProperties()`方法,它能简化属性复制的过程,但可能无法处理复杂的嵌套...
本文将深入探讨这两种拷贝方式以及它们在C#中的实现方法,特别是如何使用`MemberwiseClone`、反射以及反序列化技术。 首先,浅拷贝是通过`Object.MemberwiseClone()`方法来实现的。这个方法为对象创建一个新的实例...
分享一个使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝 的小程序, http://blog.csdn.net/bluedoctor/article/details/8424510 是原理说明,相信请看链接文章。
本主题将详细探讨如何使用C#的表达式(Expression)来实现对象的深拷贝。 首先,我们需要理解什么是表达式树(Expression Tree)。表达式树是一种表示代码的抽象数据结构,它能够让我们以数据的形式查看和操作代码...
以下是一个使用反射实现对象深度复制的示例代码: ```csharp public static class DeepCopyHelper { public static object Copy(this object obj) { Object targetDeepCopyObj; Type targetType = obj.GetType...
在实际应用中,我们还可以考虑使用序列化和反序列化的方式实现深度拷贝,或者使用第三方库如Apache Commons Lang的`DeepClone`方法,它们提供了更简便的解决方案。但这里我们重点讨论了如何仅通过Java反射机制来实现...
3. **使用反射**:通过反射遍历类的所有字段,逐个复制。这种方法适用于自定义的复杂类型,但效率较低且不易维护。 4. **使用`System.MemberInfo`和`Expression`**:对于更复杂的情况,可以使用`MemberInfo`和`...
内容概要:本资源提供了一个Java Bean转换工具类示例,展示了如何使用反射和JSON序列化实现对象之间的属性拷贝。该工具类包含两个主要方法:convertTo和convertByJackson,前者基于反射用于结构相同的对象间的属性...
在给定的标题和描述中,我们关注的是如何利用反射机制来实现对象的深度拷贝。深度拷贝是指创建一个与原对象完全独立的新对象,包括所有嵌套对象的副本。以下将详细解释如何通过反射和序列化来实现这一目标。 首先,...
Java没有内置的深拷贝机制,但可以通过反射实现。假设我们有两个 `Person` 类的实例 `person1` 和 `person2`,我们想要将 `person1` 的属性值复制到 `person2`: ```java public static void copyBeanProperties...
BeanUtil属性拷贝工具类,支持基本的javabean属性拷贝,通过java反射和泛型编程实现了list属性拷贝
3. **实现类属性拷贝器** 实现一个类属性拷贝器,通常需要以下步骤: - **反射机制**:利用C#的`System.Reflection`命名空间,获取类的类型信息,包括其属性列表。 - **匹配属性**:比较源对象和目标对象的属性,...
`Type`类代表.NET中的类型,我们可以使用`dllAssembly.GetTypes()`获取DLL中的所有类型,或者`dllAssembly.GetType("Namespace.ClassName")`获取特定类型。接下来,可以使用`Activator.CreateInstance`创建这些类型...
- **动态代理**:Java的动态代理机制(`java.lang.reflect.Proxy`)利用反射实现代理类的创建。 - **元数据处理**:例如处理注解(annotations),获取带有特定注解的类、方法等。 - **通用工具类**:例如深度拷贝、...
- 使用Java反射API来复制对象。 - 使用Apache Commons Lang库中的`BeanUtils.copyProperties`方法。 - 使用第三方库如Guava提供的拷贝工具。 #### 总结 在Java开发中,理解和掌握浅拷贝与深拷贝的概念及其实现方式...
工具使用:在Linux环境下,如Red Hat系统,使用QuikLab这类测试工具来进行实际的测试操作。 4. QuikLab测试软件的使用 QuikLab是一种测试工具,它能帮助创建测试项目,并为反射内存卡配置测试环境。 环境配置:创建...