欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java对象之间的复制,反射,java对象复制反射,public class

来源: javaer 分享于  点击 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;    }}
相关栏目:

用户点评