采用Java的反射机制编写的克隆类以及方法的代码
2010-07-02 15:38
656 查看
package reflection; public class Customer { private Long id; private String name; private int age; public Customer() { } public Customer(String name, int age) { this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package reflection; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectionCopy { public static void main(String[] args) throws Exception { Customer customer=new Customer("linwei",24); customer.setId(new Long(1)); Customer customerCopy = (Customer)new ReflectionCopy().copy(customer); System.out.println("这个是COPY之后的对象: " + customerCopy); System.out.println("这个是COPY之后的对象: customerCopy.getAge() is " + customerCopy.getAge()); System.out.println("这个是COPY之后的对象: customerCopy.getName() is " + customerCopy.getName()); System.out.println("这个是COPY之后的对象: customerCopy.getId() is " + customerCopy.getId()); } public Object copy(Object object) throws Exception { //获得对象的类型 Class classType = object.getClass(); System.out.println("对象的名字是: " + classType.getName()); System.out.println("对象的类型是: " + classType.getClass()); //通过默认构造方法创建一个新的对象 Object objectCopy = classType.getConstructor(new Class[]{}).newInstance(new Object[]{}); //获得对象的所有属性 // Field fields[] = classType.getFields(); Field fields[] = classType.getDeclaredFields(); for(int i=0;i<fields.length;i++) { Field newField = fields[i]; String fieldName=newField.getName(); String firstLetter=fieldName.substring(0,1).toUpperCase(); // 获得和属性对应的getXXX()方法的名字 String getMethodName="get"+firstLetter+fieldName.substring(1); // 获得和属性对应的setXXX()方法的名字 String setMethodName="set"+firstLetter+fieldName.substring(1); //下面是组装对应的get/set方法 Method getMethod = classType.getMethod(getMethodName, new Class[]{}); Method setMethod = classType.getMethod(setMethodName, new Class[]{newField.getType()}); //调用原对象的get方法 Object value = getMethod.invoke(object, new Object[]{}); System.out.println("value is: " + value); //调用赋值对象的set方法 setMethod.invoke(objectCopy, new Object[]{value}); } return objectCopy; } }
相关文章推荐
- Java方法的动态调用(采用反射机制)
- JAVA 采用反射机制 获取构造方法
- 如何使用Java的反射机制以及调用构造方法?
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
- (JNI)c代码利用反射调用java方法
- 使用java反射实现对象工厂以及工具类的编写
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- java使用反射机制调用方法
- Excel表格导出,java代码,采用反射加注解的方式获得excel表格中的数据
- Android高速截屏之vysor反射截屏原理实现方法以及代码下载
- 怎样在JAVA 中封装数据库操作(增删改查)运用反射机制!已贴出删除和查询方法,求增加和修改!
- 编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议41~46)
- Java反射代码--06.执行所有特定的set方法
- JavaBean中通过自省机制拿到对应的属性和方法,以及BeanUtils工具类中的拷贝属性方法
- JAVA | 40 - 反射机制 | 反射调用普通方法
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- Java类型信息与用反射机制编写通用的Excel导入导出
- java-反射机制-简单代码
- Java的RTTI和反射机制代码分析