[Java] Java对象之间的复制,反射 (简单对象间属性一致时的值拷贝) →→→→→进入此内容的聊天室

来自 , 2020-07-25, 写在 Java, 查看 107 次.
URL http://www.code666.cn/view/4ca82782
  1. public class TwoBeanUtils {
  2.  
  3.     /** 日志输出 */
  4.     final static Logger log = LoggerFactory.getLogger(TwoBeanUtils.class);
  5.     /**
  6.      * 简单对象间属性一致时的值拷贝
  7.      * @param from
  8.      * @param to
  9.      */
  10.     public static void copyFormToBean(Object from,Object to){
  11.         try{
  12.             Field[] field = from.getClass().getDeclaredFields();
  13.             for (int i = 0; i < field.length; i++) {
  14.                 try{
  15.                     String fieldname = field[i].getName();
  16.                     String setMethodname = new StringBuffer("set").append(
  17.                             fieldname.substring(0, 1).toUpperCase()).append(
  18.                             fieldname.substring(1)).toString();
  19.                     String getMethodname = new StringBuffer("get").append(
  20.                             fieldname.substring(0, 1).toUpperCase()).append(
  21.                             fieldname.substring(1)).toString();
  22.                     Method method = from.getClass().getMethod(getMethodname, null);
  23.                     Class[] cla = new Class[1];
  24.                     cla[0] = field[i].getType();
  25.                     Object[] paras=new Object[1];
  26.                     paras[0]=method.invoke(from,null);
  27.                     if ( paras[0]!=null){
  28.                         to.getClass().getMethod(setMethodname, cla).invoke(
  29.                                 to, paras);
  30.                     }
  31.                 }catch(Exception e){
  32.  
  33.                 }
  34.             }
  35.         }catch(Exception e){
  36.             log.error("form表单拷贝到对象", e);
  37.         }
  38.     }
  39.     /**
  40.      * 简单对象间属性一致时的值拷贝
  41.      * @param from
  42.      * @param to
  43.      */
  44.     public static void copyBeanToForm(Object from,Object to){
  45.         try{
  46.             Field[] field = to.getClass().getDeclaredFields();
  47.             for (int i = 0; i < field.length; i++) {
  48.                 try{
  49.                     String fieldname = field[i].getName();
  50.                     String setMethodname = new StringBuffer("set").append(
  51.                             fieldname.substring(0, 1).toUpperCase()).append(
  52.                             fieldname.substring(1)).toString();
  53.                     String getMethodname = new StringBuffer("get").append(
  54.                             fieldname.substring(0, 1).toUpperCase()).append(
  55.                             fieldname.substring(1)).toString();
  56.     //              System.out.println(fieldname);
  57.                     Method method = from.getClass().getMethod(getMethodname, null);
  58.                     Class[] cla = new Class[1];
  59.                     cla[0] = field[i].getType();
  60.                     Object[] paras=new Object[1];
  61.                     paras[0]=method.invoke(from,null);
  62.                     //System.out.println(fieldname+"="+paras[0]);
  63.                     to.getClass().getMethod(setMethodname, cla).invoke(
  64.                             to, paras);
  65.                 }catch(Exception e){
  66.                 }
  67.             }
  68.         }catch(Exception e){
  69.             log.error("对象拷贝到form表单", e);
  70.         }
  71.     }
  72.     /**
  73.      * 简单对象间属性名一致时的值拷贝
  74.      * @param bean其为一组简单属性的对象
  75.      * @param beans其属性为bean元素对象属性的数组
  76.      */
  77.     public static void copyBeanToBeans(List bean, Object beans) {
  78.  
  79.         try {
  80.             if (bean != null) {
  81.                 Field[] field = beans.getClass().getDeclaredFields();
  82.                 String claname[]=new String[field.length];
  83.                 //System.out.println(field.length);
  84.                 for (int i = 0; i < field.length; i++) {
  85.                     try{
  86.                         List list = new ArrayList();
  87.                         String fieldname = field[i].getName();
  88.                         String setMethodname = new StringBuffer("set").append(
  89.                                 fieldname.substring(0, 1).toUpperCase()).append(
  90.                                 fieldname.substring(1)).toString();
  91.                         String getMethodname = new StringBuffer("get").append(
  92.                                 fieldname.substring(0, 1).toUpperCase()).append(
  93.                                 fieldname.substring(1)).toString();
  94.                         int k = 0;
  95.                         Iterator enmu = bean.iterator();
  96.                         while (enmu.hasNext()) {
  97.                             Object temp = enmu.next();
  98.  
  99.                                 claname[i]=temp.getClass().getDeclaredField(fieldname).getType().getName();
  100.                                 Method method = temp.getClass().getMethod(getMethodname, null);
  101.                                 list.add(method.invoke(temp, null));
  102.  
  103.                             k++;
  104.                         }
  105.                         Class[] cla = new Class[1];
  106.                         cla[0] = beans.getClass().getDeclaredField(fieldname)
  107.                                 .getType();
  108.                         //System.out.println(cla[0]);
  109.                         Object[] paras=new Object[1];
  110.                         Object obj=null;
  111.                         obj= Array.newInstance(Class.forName(claname[i]),bean.size());
  112.                         list.toArray((Object[])obj);
  113.                         paras[0]=obj;
  114.                         beans.getClass().getMethod(setMethodname, cla).invoke(
  115.                                 beans, paras);
  116.                     }catch(Exception ex){
  117.                         //有可能beans中的属性,List的对象没有
  118.                     }
  119.                 }
  120.             }
  121.  
  122.         } catch (Exception e) {
  123.             log.error("List拷贝到Beans表单", e);
  124.         }
  125.     }
  126.     /**
  127.      * 简单对象间属性名一致时的值拷贝
  128.      * @param bean为简单属性的对象类
  129.      * @param beans其属性为bean对象属性的数组
  130.      * @param size beans属性数组的长度
  131.      * @return List 一组元素为bean的ArrayList
  132.      */
  133.     public static List copyBeansToBean(Object beans, Class bean,int size) {
  134.         List list = new ArrayList();
  135.         try {
  136.             if (beans != null) {
  137.                 int start=0;
  138.                 while(start<size){
  139.                     Object addobj=Class.forName(bean.getName()).getConstructor(null).newInstance(null);
  140.                     Field[] field = bean.getDeclaredFields();
  141.                     for (int i = 0; i < field.length; i++) {
  142.  
  143.                         String fieldname = field[i].getName();
  144.                         String setMethodname = new StringBuffer("set").append(
  145.                                 fieldname.substring(0, 1).toUpperCase()).append(
  146.                                 fieldname.substring(1)).toString();
  147.                         String getMethodname = new StringBuffer("get").append(
  148.                                 fieldname.substring(0, 1).toUpperCase()).append(
  149.                                 fieldname.substring(1)).toString();
  150.                         try{
  151.                             Method method = beans.getClass().getMethod(getMethodname, null);
  152.                             Object arr=method.invoke(beans,null);
  153.                             //System.out.println(fieldname+"===="+arr);
  154.                             int tempsize=arr==null ? 0:Array.getLength(arr);
  155.                             //System.out.println("tempsize="+tempsize);
  156.                             if (tempsize>=size){
  157.                                 Class[] cla = new Class[1];
  158.                                 cla[0] = bean.getDeclaredField(fieldname)
  159.                                         .getType();
  160.                                 //System.out.println(cla[0].getName());
  161.                                 Object[] paras=new Object[1];
  162.                                 paras[0]=Array.get(arr,start);
  163.                                 //System.out.println(Array.get(arr,start));
  164.                                 bean.getMethod(setMethodname, cla).invoke(
  165.                                         addobj, paras);
  166.                             }else{
  167.                                 Class[] cla = new Class[1];
  168.                                 cla[0] = bean.getDeclaredField(fieldname)
  169.                                         .getType();
  170.                                 //System.out.println(cla[0].getName());
  171.                                 Object[] paras=new Object[1];
  172.                                 paras[0]=null;
  173.                                 //System.out.println(Array.get(arr,start));
  174.                                 bean.getMethod(setMethodname, cla).invoke(
  175.                                         addobj, paras);
  176.                             }
  177.                         }catch(Exception ex){
  178.                             Class[] cla = new Class[1];
  179.                             cla[0] = bean.getDeclaredField(fieldname)
  180.                                     .getType();
  181.                             //System.out.println(cla[0].getName());
  182.                             Object[] paras=new Object[1];
  183.                             paras[0]=null;
  184.                             //System.out.println(Array.get(arr,start));
  185.                             bean.getMethod(setMethodname, cla).invoke(
  186.                                     addobj, paras);
  187.                         }
  188.  
  189.                     }
  190.                     list.add(addobj);
  191.                     start++;
  192.                 }
  193.                 //System.out.println("list size="+start);
  194.             }
  195.  
  196.         } catch (Exception e) {
  197.             log.error("Beans拷贝到List,元素为bean", e);
  198.         }
  199.         //System.out.println("list size="+list.size());
  200.         return list;
  201.     }
  202.     /**
  203.      * 简单对象间属性名一致时的值拷贝
  204.      * @param list 每一个元素bean为简单属性的对象类
  205.      * @param beans其属性为bean对象属性的数组
  206.      * @param size beans属性数组的长度
  207.      * @return List 一组元素为bean的ArrayList
  208.      */
  209.     public static List copyBeansToBean(Object beans, List bean) {
  210.         List list = bean;
  211.         int size=list.size();
  212.         try {
  213.             if (beans != null) {
  214.                 int start=0;
  215.                 while(start<size){
  216.                     Object addobj=list.get(start);
  217.                     Class beanclass=addobj.getClass();
  218.                     Field[] field = beanclass.getDeclaredFields();
  219.                     for (int i = 0; i < field.length; i++) {
  220.                         try{
  221.                             String fieldname = field[i].getName();
  222.                             String setMethodname = new StringBuffer("set").append(
  223.                                     fieldname.substring(0, 1).toUpperCase()).append(
  224.                                     fieldname.substring(1)).toString();
  225.                             String getMethodname = new StringBuffer("get").append(
  226.                                     fieldname.substring(0, 1).toUpperCase()).append(
  227.                                     fieldname.substring(1)).toString();
  228.                             Method method = beans.getClass().getMethod(getMethodname, null);
  229.                             Object arr=method.invoke(beans,null);
  230.                             //System.out.println(fieldname+"===="+arr);
  231.                             int tempsize=arr==null ? 0:Array.getLength(arr);
  232.                             //System.out.println("tempsize="+tempsize);
  233.                             if (tempsize==size){
  234.                                 Class[] cla = new Class[1];
  235.                                 cla[0] = beanclass.getDeclaredField(fieldname)
  236.                                         .getType();
  237.                                 //System.out.println(cla[0].getName());
  238.                                 Object[] paras=new Object[1];
  239.                                 paras[0]=Array.get(arr,start);
  240.                                 //System.out.println(Array.get(arr,start));
  241.                                 beanclass.getMethod(setMethodname, cla).invoke(
  242.                                         addobj, paras);
  243.                             }
  244.                         }catch(Exception ex){}
  245.  
  246.                     }
  247.                     start++;
  248.                 }
  249. //              System.out.println("list size="+start);
  250.             }
  251.  
  252.         } catch (Exception e) {
  253.             log.error("Beans拷贝到List,元素为bean", e);
  254.         }
  255.         //System.out.println("list size="+list.size());
  256.         return list;
  257.     }
  258.  
  259. }
  260.  
  261. //源代码片段来自云代码http://yuncode.net
  262.                        

回复 "Java对象之间的复制,反射 (简单对象间属性一致时的值拷贝)"

这儿你可以回复上面这条便签

captcha