Java对象之间的复制,反射,java对象复制反射,public class
分享于 点击 44043 次 点评:66
Java对象之间的复制,反射,java对象复制反射,public class
public class TwoBeanUtils { /** 日志输出 */ final static Logger log = LoggerFactory.getLogger(TwoBeanUtils.class); /** * 简单对象间属性一致时的值拷贝 * @param from * @param to */ public static void copyFormToBean(Object from,Object to){ try{ Field[] field = from.getClass().getDeclaredFields(); for (int i = 0; i < field.length; i++) { try{ String fieldname = field[i].getName(); String setMethodname = new StringBuffer("set").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); String getMethodname = new StringBuffer("get").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); Method method = from.getClass().getMethod(getMethodname, null); Class[] cla = new Class[1]; cla[0] = field[i].getType(); Object[] paras=new Object[1]; paras[0]=method.invoke(from,null); if ( paras[0]!=null){ to.getClass().getMethod(setMethodname, cla).invoke( to, paras); } }catch(Exception e){ } } }catch(Exception e){ log.error("form表单拷贝到对象", e); } } /** * 简单对象间属性一致时的值拷贝 * @param from * @param to */ public static void copyBeanToForm(Object from,Object to){ try{ Field[] field = to.getClass().getDeclaredFields(); for (int i = 0; i < field.length; i++) { try{ String fieldname = field[i].getName(); String setMethodname = new StringBuffer("set").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); String getMethodname = new StringBuffer("get").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); // System.out.println(fieldname); Method method = from.getClass().getMethod(getMethodname, null); Class[] cla = new Class[1]; cla[0] = field[i].getType(); Object[] paras=new Object[1]; paras[0]=method.invoke(from,null); //System.out.println(fieldname+"="+paras[0]); to.getClass().getMethod(setMethodname, cla).invoke( to, paras); }catch(Exception e){ } } }catch(Exception e){ log.error("对象拷贝到form表单", e); } } /** * 简单对象间属性名一致时的值拷贝 * @param bean其为一组简单属性的对象 * @param beans其属性为bean元素对象属性的数组 */ public static void copyBeanToBeans(List bean, Object beans) { try { if (bean != null) { Field[] field = beans.getClass().getDeclaredFields(); String claname[]=new String[field.length]; //System.out.println(field.length); for (int i = 0; i < field.length; i++) { try{ List list = new ArrayList(); String fieldname = field[i].getName(); String setMethodname = new StringBuffer("set").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); String getMethodname = new StringBuffer("get").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); int k = 0; Iterator enmu = bean.iterator(); while (enmu.hasNext()) { Object temp = enmu.next(); claname[i]=temp.getClass().getDeclaredField(fieldname).getType().getName(); Method method = temp.getClass().getMethod(getMethodname, null); list.add(method.invoke(temp, null)); k++; } Class[] cla = new Class[1]; cla[0] = beans.getClass().getDeclaredField(fieldname) .getType(); //System.out.println(cla[0]); Object[] paras=new Object[1]; Object obj=null; obj= Array.newInstance(Class.forName(claname[i]),bean.size()); list.toArray((Object[])obj); paras[0]=obj; beans.getClass().getMethod(setMethodname, cla).invoke( beans, paras); }catch(Exception ex){ //有可能beans中的属性,List的对象没有 } } } } catch (Exception e) { log.error("List拷贝到Beans表单", e); } } /** * 简单对象间属性名一致时的值拷贝 * @param bean为简单属性的对象类 * @param beans其属性为bean对象属性的数组 * @param size beans属性数组的长度 * @return List 一组元素为bean的ArrayList */ public static List copyBeansToBean(Object beans, Class bean,int size) { List list = new ArrayList(); try { if (beans != null) { int start=0; while(start<size){ Object addobj=Class.forName(bean.getName()).getConstructor(null).newInstance(null); Field[] field = bean.getDeclaredFields(); for (int i = 0; i < field.length; i++) { String fieldname = field[i].getName(); String setMethodname = new StringBuffer("set").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); String getMethodname = new StringBuffer("get").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); try{ Method method = beans.getClass().getMethod(getMethodname, null); Object arr=method.invoke(beans,null); //System.out.println(fieldname+"===="+arr); int tempsize=arr==null ? 0:Array.getLength(arr); //System.out.println("tempsize="+tempsize); if (tempsize>=size){ Class[] cla = new Class[1]; cla[0] = bean.getDeclaredField(fieldname) .getType(); //System.out.println(cla[0].getName()); Object[] paras=new Object[1]; paras[0]=Array.get(arr,start); //System.out.println(Array.get(arr,start)); bean.getMethod(setMethodname, cla).invoke( addobj, paras); }else{ Class[] cla = new Class[1]; cla[0] = bean.getDeclaredField(fieldname) .getType(); //System.out.println(cla[0].getName()); Object[] paras=new Object[1]; paras[0]=null; //System.out.println(Array.get(arr,start)); bean.getMethod(setMethodname, cla).invoke( addobj, paras); } }catch(Exception ex){ Class[] cla = new Class[1]; cla[0] = bean.getDeclaredField(fieldname) .getType(); //System.out.println(cla[0].getName()); Object[] paras=new Object[1]; paras[0]=null; //System.out.println(Array.get(arr,start)); bean.getMethod(setMethodname, cla).invoke( addobj, paras); } } list.add(addobj); start++; } //System.out.println("list size="+start); } } catch (Exception e) { log.error("Beans拷贝到List,元素为bean", e); } //System.out.println("list size="+list.size()); return list; } /** * 简单对象间属性名一致时的值拷贝 * @param list 每一个元素bean为简单属性的对象类 * @param beans其属性为bean对象属性的数组 * @param size beans属性数组的长度 * @return List 一组元素为bean的ArrayList */ public static List copyBeansToBean(Object beans, List bean) { List list = bean; int size=list.size(); try { if (beans != null) { int start=0; while(start<size){ Object addobj=list.get(start); Class beanclass=addobj.getClass(); Field[] field = beanclass.getDeclaredFields(); for (int i = 0; i < field.length; i++) { try{ String fieldname = field[i].getName(); String setMethodname = new StringBuffer("set").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); String getMethodname = new StringBuffer("get").append( fieldname.substring(0, 1).toUpperCase()).append( fieldname.substring(1)).toString(); Method method = beans.getClass().getMethod(getMethodname, null); Object arr=method.invoke(beans,null); //System.out.println(fieldname+"===="+arr); int tempsize=arr==null ? 0:Array.getLength(arr); //System.out.println("tempsize="+tempsize); if (tempsize==size){ Class[] cla = new Class[1]; cla[0] = beanclass.getDeclaredField(fieldname) .getType(); //System.out.println(cla[0].getName()); Object[] paras=new Object[1]; paras[0]=Array.get(arr,start); //System.out.println(Array.get(arr,start)); beanclass.getMethod(setMethodname, cla).invoke( addobj, paras); } }catch(Exception ex){} } start++; }// System.out.println("list size="+start); } } catch (Exception e) { log.error("Beans拷贝到List,元素为bean", e); } //System.out.println("list size="+list.size()); return list; }}
用户点评