只为记录学习过程! package com.test.reflection; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectTester { public Object copy(Object obj) throws Exception { Class<?> classType = obj.getClass(); System.out.println("Class name is = " + classType.getName()); // 通过默认的构造方法创建一个新的对象 Object newObj = classType.getConstructor(new Class[]{}) .newInstance(new Object[]{}); //获取对象的属性 Field[] fields = classType.getDeclaredFields(); for (Field field : fields) { String fieldName= field.getName(); System.out.println("fieldName is " + fieldName); String firstLetter = fieldName.substring(0,1).toUpperCase(); // 获得和属性对应的getXXX()方法的名字 String getMethodName = "get" + firstLetter + fieldName.substring(1); // 获得和属性对应的setXXX()方法的名字 String setMethodName ="set" + firstLetter + fieldName.substring(1); // 获得和属性对应的getXXX()方法 Method getMethod = classType.getMethod(getMethodName, new Class[]{}); // 获得和属性对应的setXXX()方法 Method setMethod = classType.getMethod(setMethodName, new Class[]{field.getType()}); // 调用原对象的getXXX()方法 Object val = getMethod.invoke(obj, new Object[]{}); System.out.println("value is " + val); // 调用拷贝对象的setXXX()方法 setMethod.invoke(newObj, new Object[]{val}); } return newObj; } public static void main(String[] args) { try { Customer cus=new Customer("Ivan",21); cus.setId(1l); Customer newCus=(Customer) new ReflectTester().copy(cus); System.out.println("new Customter :" + newCus.getAge() + " " + newCus.getName() + " " + newCus.getId()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 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; } }