javabean对象自动赋值给另一个javabean对象

方法1:把JavaBean的from的值自动set给to,省略了自己从from中get然后再set给to

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

public static Object convertBean2Bean(Object from, Object to) {
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(to.getClass());
            PropertyDescriptor[] ps = beanInfo.getPropertyDescriptors();   

            for (PropertyDescriptor p : ps) {
               Method getMethod = p.getReadMethod();
               Method setMethod = p.getWriteMethod();
               if (getMethod != null && setMethod != null) {
                   try {
                      Object result = getMethod.invoke(from);
                      setMethod.invoke(to, result);
                   } catch (Exception e) {
                      // 如果from没有此属性的get方法,跳过
                      continue;
                   }
               }
            }
        } catch (Exception e) {
           e.printStackTrace();
        }   

        return to;
    }   

方法2:
    /**
     * 不支持to继承(to是其他bean的子类)
     */   

import java.lang.reflect.Field;
import java.lang.reflect.Method;

   public static Object coverBean2Bean(Object from, Object to) {
        Class fClass = from.getClass();
        Class tClass = to.getClass();
        // 拿to所有属性(如果有继承,父类属性拿不到)
        Field[] cFields = tClass.getDeclaredFields();
        try {
            for (Field field : cFields) {
               String cKey = field.getName();
               // 确定第一个字母大写
               cKey = cKey.substring(0, 1).toUpperCase() + cKey.substring(1);   

               Method fMethod;
               Object fValue;
               try {
                    fMethod = fClass.getMethod("get" + cKey);// public方法
                    fValue = fMethod.invoke(from);// 取getfKey的值
               } catch (Exception e) {
                 // 如果from没有此属性的get方法,跳过
                 continue;
               }   

                try {
                    // 用fMethod.getReturnType(),而不用fValue.getClass()
                    // 为了保证get方法时,参数类型是基本类型而传入对象时会找不到方法
                    Method cMethod = tClass.getMethod("set" + cKey, fMethod.getReturnType());
                    cMethod.invoke(to, fValue);
                } catch (Exception e) {
                    // 如果to没有此属性set方法,跳过
                    continue;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }   

        return to;
    }   

 3.打印bean   

   /**      * 打印bean信息
     */
   public static void printInvoke(Object object) {
      Method[] ms = object.getClass().getMethods();
      String str = spare;
      str += "start log object: " + object.getClass().getSimpleName() + "\r\n";
      str += spare;
      System.out.print(str);   

      for (int i = 0; i < ms.length; i++) {
         if (ms[i].getName().indexOf("get") != -1
             && !ms[i].getName().equals("getClass")) {
             try {
                 System.out.println(ms[i].getName() + " = "
                 + ms[i].invoke(object));
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
      }   

     System.out.println(spare);
   }   
时间: 2024-10-13 16:23:45

javabean对象自动赋值给另一个javabean对象的相关文章

复制JAVABEAN中的属性到另外一个JAVABEAN中

下午写了一个属性复制方法,记录如下: class POUtil{ /** * * Function : 将一个source中的属性到复制到dest * @author : Liaokailin * CreateDate : 2014-6-30 * version : 1.0 * @param <T> * @param dest * @param source * @return * @throws IntrospectionException */ public static <T ex

Python把同一个对象循环赋值给另外一个变量

Python把同一个对象循环赋值给另外一个变量,修改一个对象,其他对象也修改了 >>> row=['_'] * 3 >>> board = [] >>> for i in range(3): ... board.append(row) ... >>> row ['_', '_', '_'] >>> board [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']] &g

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):当函数返回一个局部对象时,虽然这个对象已经释放,但是返回时会产生一个临时的对象.而当返回一个局部对象的引用时,这个对象已经不存在了.这就要求在函数参数中,包含一个引用或指针.int &func(int a,int b,int &retsult){ retsult = a + b; return &retsult}但是如下代码是错误的(返回局部对象的引用)int &func(int a,int b){ int &

不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 对象的动态创建和释放 对象的赋值和复制 静态属性和静态函数 类模板 示例1.CppEmployee 类CppEmployee.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppEmployee { int Number; // 默认为 private private: // 以下都是

C++ 对象的赋值和复制 基本的

对象的赋值 如果对一个类定义了两个或多个对象,则这些对象之间是可以进行赋值,或者说,一个对象的值可以赋值给另一个同类的对象.这里所指的值是指对象中所有数       据的成员的值.对象之间进行赋值是“=”进行的,对象赋值的形式如下: 对象名1=对象名2; #include <iostream>using namespace std;class Box{public: Box(int =10,int =10,int =10); int volume();private: int height;

检测一个DOM对象是否为空

我们时常要检测一个DOM对象是否为空. var $jObject = $('#btn'); alert($jObject ); 我们会发现,$jObject 永远不会为空.为什么呢?$ 方法查找对象,始终都会返回一个jQuery 对象的. 解决办法: 我们就要把jQuery对象转换成js对象. ①var dom = $jObect[0]; alert(dom); ②if($jObect.length>0) {alert("not null!");}

JS实现一个基于对象的链表

JS实现一个基于对象的链表 /*JS实现一个基于对象的链表*/ function Node(element){ this.element = element;//节点存储的元素 this.next = null;//节点指向的下一个节点,这里先设置为空 } function LList(){ this.head = new Node("head");//生成一个头节点 this.find = find;//在链表中找到某个节点 this.insert = insert;//在链表中某个

【C++】继承派生中对象相互赋值情况

//继承派生中对象相互赋值情况 //派生类的对象可以赋值给基类的对象,这时是把派生类对象中从对应基类中继承来的隐藏对象赋值给基类对象. //反过来不行,因为派生类的新成员无值可赋. #include <iostream> using namespace std; class B { public: B() { cout<<"B"<<endl; } void fun() { cout<<"B::fun()"<<

java利用反射机制完成JavaBean的属性赋值

今天碰到一个场景,就是一个JavaBean,有些属性的值需要去数据库其他表中获取,这样就需要调用其他dao方法得到这个值,然后再set进去. 可是问题来了,如果需要用这种方式赋值的属性特别多的话,一个一个set进去就需要写很多set方法,代码不仅冗余,而且很麻烦. 于是就想通过反射机制去自动set值. 假设有JavaBean为CreditRatingFile.java类,某些属性值需要调用CreditRatingFileApplyService类中的方法获得,并拿到返回值再set出这些属性. 一