利用反射原理用get/set方法设置属性(也可用clone,但如果有特殊处理的东西,这个好用)

来源:互联网 发布:岳不群 知乎 编辑:程序博客网 时间:2024/06/05 01:17

先创建一个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;}


阅读全文
0 0
原创粉丝点击