您的位置:首页 > 编程语言 > Java开发

使用反射复制一个JavaBean的对象

2012-05-12 10:58 357 查看
先看代码吧:

package com.java.study;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReflectTester {
public Object copy(Object object) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Class classType = object.getClass();//获得对象的类型
System.out.println("Class:" + classType.getName());

//通过默认的构造函数创建一个新的对象
Object objectCopy = classType.getConstructor(new Class[] {}).
newInstance(new Object[] {});

//获得对象的所有属性
Field fields[] = classType.getDeclaredFields();

for(int i = 0; i < fields.length; i++) {
Field field = fields[i];

String fieldName = field.getName();
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 value = getMethod.invoke(object, new Object[]{});
System.out.println(fieldName + ":" + value);
//调用复制对象的setXXX()方法
setMethod.invoke(objectCopy, new Object[]{value});
}
return objectCopy;

}

public static void main(String[] args) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Customer1 customer = new Customer1("tom",21);
customer.setId(new Long(1));

Customer1 customerCopy = (Customer1) new ReflectTester().copy(customer);
System.out.println("Copy information:" + customerCopy.getName()+ ""
+customerCopy.getAge());
}

}

class Customer1 implements Serializable {

private Long id;
private String name;
private int age;

public Customer1() {}
public Customer1(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;
}
}


代码中有一个Customer1的JavaBean,通过反射复制了一个Customer1类的对象,为customerCopy,程序中的new Class[] { }是一种快捷方式,获得方法的引用。[]中用来放参数,{}里面可以放置方法的返回类型。new Class[] { }相当于new class("构造函数参数").newinstance.

//调用原对象的getXXX()方法

Object value = getMethod.invoke(object, new Object[]{});

System.out.println(fieldName + ":" + value);

用来获得特定对象的特定方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: