先创建一个POJO,如User,里面所有属性都用get/set方法,假设original是User的一个实例对象,已经设置了各种属性,现在要把属性赋值到新对象里去。
public User testCopy(User original){
User copy=new User();
Class<User> cla=(Class<User>) original.getClass();
Method[] ffs=cla.getDeclaredMethods();//获取所有声明的方法,不包含父类里的方法
for (Method method : ffs) {
//如果有需要特殊处理的可以这样写
if(method.toString().contains(".getBjs()")){
//处理过程
continue;
}
if(method.toString().contains(".get")){//获取get方法
Object obj=method.invoke(original, null);//获取调用get方法后获得的对象
if(obj!=null){
Class[] cls=new Class[]{obj.getClass()};//返回值类型数组,后面调用对应set方法时要用此类型对应的参数类型
String str=method.toString();
int start=str.indexOf(".get");
str=str.substring(start, str.length());
String setmethod=str.replace(".get", "set").replace("()", "");//处理含包名、类名、方法名及括号的get方法,变成只有方法名且没有括号的set方法
Method m=cla.getDeclaredMethod(setmethod,cls);//set方法的参数类型和get方法的返回值类型对应
m.invoke(copy, obj);//调用set方法设置值
}
}
}
return copy;
}