用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java 值对象之间的拷贝工具(利用反射,通用)

2015-01-27 作者: java源代码大全举报

[java]代码库

import java.lang.reflect.Field;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.MethodUtils;
import org.apache.commons.lang.StringUtils;

/**
 * Bean相关操作处理工具类
 * @since version1.0
 */
@SuppressWarnings("rawtypes")
public class ObjectUtils {

    /**
     * 根据传入的cls复制整个对象的属性值到另外一个对象的对应的同名和同类型的属性(只复制cls存在的且属同名和同类型的属性值,名为sguid的属性不拷贝)
     * @param vo<Object> 源值对象
     * @param target<Object> 目标对象
     * @param cls<Class> 被拷贝值的对象类型
     * @param not_copy<String> 用于指定不拷贝值的属性,可传多个属性名,之间用逗号隔开
     * @return void
     */
    private static void copyObjectValue(Object vo, Object target, Class cls, String not_copy, boolean isCopyNull){
        int flag=0;
        if(StringUtils.isNotBlank(not_copy)){
            not_copy=","+not_copy+",";//前后加逗号是为了后面能够准确的判断所包含的属性名称
        }

        try{
            String sname = "";
            Field[] fields = cls.getDeclaredFields();

            for (int i = 0; i < fields.length; i++) {    
                sname = fields[i].getName();

                //如果属性为id或属性名存在于not_copy指的属性名范围中,则不拷贝访属性值
                if(sname.toLowerCase().equals("id") || (StringUtils.isNotBlank(not_copy) && not_copy.indexOf(","+sname+",")!=-1))
                    continue;

                if(fields[i].getType().toString().startsWith("class") 
                        && !fields[i].getType().getName().equals("java.lang.String")){ //对象类型字段值拷贝
                    try{
                        BeanUtils.setProperty(target, sname, 
                                MethodUtils.invokeMethod(vo,"get"+sname.substring(0, 1).toUpperCase()+sname.substring(1),null));
                    }catch(Exception ne){
                        flag=1;
                        continue;
                    }           
                }else{ //基本类型字段值拷贝
                    try{
                        if(isCopyNull==false && BeanUtils.getProperty(vo, sname)==null){
                            continue;
                        }else{
                            BeanUtils.setProperty(target, sname, BeanUtils.getProperty(vo, sname));
                        }
                    }catch(Exception ne){
                        flag=1;
                        continue;
                    }   
                }
            }           
        }catch(Exception e){
            flag=1;
            e.printStackTrace();
        }

        if(flag==1){
            flag=0;
            System.gc();
        }
    }

    /**
     * 复制整个对象的属性值到另外一个对象的对应的同名和同类型的属性
     * @param vo<Object> 源值对象
     * @param target<Object> 目标对象
     * @return void
     */
    public static void copyObjValue(Object vo, Object target){
        Class cls=vo.getClass();
        while(!cls.getName().equals("java.lang.Object")){
            copyObjectValue(vo, target, cls, null, false);
            cls=cls.getSuperclass();
        }
    }

    /**
     * 复制整个对象的属性值到另外一个对象的对应的同名和同类型的属性
     * @param vo<Object> 源值对象
     * @param target<Object> 目标对象
     * @param isCopyNull<boolean> 是否拷贝NULL值
     * @return void
     */
    public static void copyObjValue(Object vo, Object target, boolean isCopyNull){
        Class cls=vo.getClass();
        while(!cls.getName().equals("java.lang.Object")){
            copyObjectValue(vo, target, cls, null, isCopyNull);
            cls=cls.getSuperclass();
        }
    }

    /**
     * 复制整个对象的属性值到另外一个对象的对应的同名和同类型的属性,但名为sguid的属性不拷贝
     * @param vo<Object> 源值对象
     * @param target<Object> 目标对象
     * @param not_copy<String> 用于指定不拷贝值的属性,可传多个属性名,之间用逗号隔开
     * @return void
     */
    public static void copyObjValue(Object vo, Object target, String not_copy){
        Class cls=vo.getClass();
        while(!cls.getName().equals("java.lang.Object")){
            copyObjectValue(vo, target, cls, not_copy, false);
            cls=cls.getSuperclass();
        }
    }

    /**
     * 复制整个对象的属性值到另外一个对象的对应的同名和同类型的属性,但名为sguid的属性不拷贝
     * @param vo<Object> 源值对象
     * @param target<Object> 目标对象
     * @param not_copy<String> 用于指定不拷贝值的属性,可传多个属性名,之间用逗号隔开
     * @param isCopyNull<boolean> 是否拷贝NULL值
     * @return void
     */
    public static void copyObjValue(Object vo, Object target, String not_copy, boolean isCopyNull){
        Class cls=vo.getClass();
        while(!cls.getName().equals("java.lang.Object")){
            copyObjectValue(vo, target, cls, not_copy, isCopyNull);
            cls=cls.getSuperclass();
        }
    }
}

//源代码片段来自云代码http://yuncode.net
			


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...