克隆工具类
来源:互联网 发布:信用卡淘宝上怎么套现 编辑:程序博客网 时间:2024/05/17 22:47
</pre><pre name="code" class="html">package com.hjx.uitls{import flash.geom.Point;import flash.utils.Dictionary;import flash.utils.describeType;import flash.utils.getDefinitionByName;import flash.utils.getQualifiedClassName;import mx.collections.ArrayCollection;import mx.core.UIComponent;import mx.utils.ObjectUtil;/** * @date 2014-6-4,@author 黄记新 */public class CloneUtil{private static var excluded:Dictionary;public function CloneUtil(){}public static function clone(obj:Object):Object{var instance:Object = null;try {var xmlType:XML = describeType(obj);var typeName:String = xmlType.@name;if(isBasicTypeName(typeName))return obj; if(typeName == "Array"){var arr:Array = new Array();for(var i:String in obj){arr[i] = clone(obj[i]);}return arr;}else if(typeName.search("Vector") >= 0){var vector:Vector = new Vector();for each(var item:Object in vector){vector.push(clone(item));}return vector;}else if(typeName.search("ArrayCollection") >= 0){var coll:ArrayCollection = new ArrayCollection();for each(var item1:Object in obj){coll.addItem(clone(item1));}return coll;}else if(obj is Point){return Point(obj).clone();}var className:String = getQualifiedClassName(obj);var clazz:Class = Class(getDefinitionByName(className));instance = new clazz();cloneStyle(obj,instance);var options:Object = new Object();options["includeReadOnly"] = false;if(!excluded){excluded = new Dictionary();}var excludes:Array = excluded[className] as Array;if(excludes == null){excludes = getExcludedProperties(obj);excluded[className] = excludes;}var objInfo:Object = ObjectUtil.getClassInfo(obj, excludes, options);var fieldName:Array = objInfo["properties"] as Array; for each(var q:QName in fieldName){if(xmlType.@isDynamic == "true"){instance[q.localName] = clone(obj[q.localName]);}else{var accs:XMLList = xmlType..accessor.(@name == q.localName);if(accs != null && accs.length() > 0 && (accs[0].@access == "readwrite" || accs[0].@access == "write")){instance[q.localName] = clone(obj[q.localName]);}}} }catch(e:ReferenceError){trace(e);}catch(e:TypeError) {trace(e);} return instance;}protected static function getExcludedProperties(object:Object) : Array{if(object is UIComponent)return getRendererProperties();elsereturn new Array();}private static var rendererProperties:Array = null;private static function getRendererProperties() : Array {if(rendererProperties == null){rendererProperties = new Array();for each(var name:QName in ObjectUtil.getClassInfo(new UIComponent())["properties"]){var pname:String = name.localName;if(pname != "left" &&pname != "top" &&pname != "x" &&pname != "y" &&pname != "width" &&pname != "height")rendererProperties.push(pname);}}return rendererProperties;}public static function isBasicTypeName(typeName:String):Boolean{return (typeName == "String"|| typeName == "int"|| typeName == "uint"|| typeName == "Boolean"|| typeName == "Number"|| typeName == "null");}public static function cloneStyle(renderer:Object, cloneRenderer:Object):void{var describe:* = describeType(renderer);var objectMetadata:* = describe.metadata;var styleProp:XMLList = objectMetadata.(@name=="Style").arg.(@key=="name");for each (var xml:XML in styleProp) {cloneRenderer.setStyle(xml.@value,renderer.getStyle(xml.@value));}}}}
0 0
- 克隆工具类
- java 对象克隆工具类
- 通过反射克隆对象,对象复制(克隆)工具类
- Clonezilla 系统克隆工具
- 通过反射克隆对象,对象复制(克隆),对象合并工具类 升级版
- JAVA对象任意深度克隆clone工具类分享
- 克隆类
- 克隆帐户建立/删除工具
- C# 实现克隆的工具类型
- React插件-测试工具集-克隆组件
- React插件-测试工具集-克隆组件
- ClonableObject-克隆类
- 克隆Object类
- Java类的克隆
- java克隆类
- C# 克隆类 CloneHelper
- 自定义类实现克隆
- 克隆
- 设置MyEclipse10字体类型和大小
- 通信消息协议组件Darks Codec正式发布
- Google搜索结果链接重定向的插件
- OCP 1Z0 052 2
- pgsql 表继承
- 克隆工具类
- 如何产生负电压?(转载)
- datetimepicker控件的使用
- SVN服务器搭建和使用(三)
- getCacheDir用法
- ubuntu 下配置MySQL服务
- replace 和TRANSLATE 函数的对比
- ZOJ 3793 First Digit
- Code128 Fontware条形码控件