|
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 |
|