Flex4值对象拷贝和比较

对象的深度拷贝方法,在应用中经常需要传递一个对象参数,传递过去的对象的修改又不希望对原对象产生影响,用该对象方法可以轻松实现了
package {
        import flash.utils.ByteArray;       
        import flash.utils.getQualifiedClassName;
        import flash.utils.getDefinitionByName;       
        import flash.net.registerClassAlias;
        public class CopyUtil{
                public static function clone(object:Object):Object{
                        var qClassName:String = getQualifiedClassName(object);
                        var objectType:Class = getDefinitionByName(qClassName) as Class;
                        registerClassAlias(qClassName, objectType);
                        var copier : ByteArray = new ByteArray();
                        copier.writeObject(object);
                        copier.position = 0;
                        return copier.readObject();
                }
        }

}

//对象属性拷贝和比较

package com.rlkems.util
{
import flash.utils.ByteArray;

import mx.collections.ArrayCollection;
import mx.utils.ObjectUtil;


/**
* model对象拷贝工具

* */
public class BeanUtils
{
public function BeanUtils()
{

}
        /**
* 对象属性拷贝

* */
public static function copyProperties(dest:Object, orig:Object):void{
if(orig is ArrayCollection){
return;
}
var classInfo:Object = ObjectUtil.getClassInfo(orig);
            var properties:Array = classInfo.properties;
            for (var j:int = 0; j < properties.length; j++)
            {
            var prop:* = properties[j];
           
            if(dest.hasOwnProperty(prop.toString())){
            if(orig[prop] is Date){
            dest[prop] = orig[prop];
            }else{
            var type:String = orig[prop] == null ? "null" : typeof(orig[prop]);
           
            if("object" == type){
            copyProperties(dest[prop],orig[prop]);
            }else{
            try{
            dest[prop] = orig[prop];
            }catch(e:Error){
            trace(e.message);
           
            }
            }
            }
            }
            }
}
/**
* 比较2个对象是否内容相同(只是进行字节比较);
* */
public static function compareObject(obj1:Object,obj2:Object):Boolean 

var buffer1:ByteArray = new ByteArray(); 
buffer1.writeObject(obj1); 
var buffer2:ByteArray = new ByteArray(); 
buffer2.writeObject(obj2); 

// compare the lengths 
var size:uint = buffer1.length; 
if (buffer1.length == buffer2.length) { 
buffer1.position = 0; 
buffer2.position = 0; 
// then the bits 
while (buffer1.position < size) { 
var v1:int = buffer1.readByte(); 
if (v1 != buffer2.readByte()) { 
return false; 

}     
return true;                         

return false; 
}   
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值