|  | 
 
| 
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;
 }
 
 }   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;
 
 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;
 }
 
 }  运行:
 C:\work>java ReflectionCopy
 对象的名字是: Customer
 对象的类型是: class java.lang.Class
 value is: 1
 value is: linwei
 value is: 24
 这个是COPY之后的对象: Customer@1fb8ee3
 这个是COPY之后的对象: customerCopy.getAge() is 24
 这个是COPY之后的对象: customerCopy.getName() is linwei
 这个是COPY之后的对象: customerCopy.getId() is 1
 | 
 |