Flex反射工具类(非常实用)
发布时间:2020-12-15 01:36:08 所属栏目:百科 来源:网络整理
导读:package com.shine.framework.core.util{import flash.utils.describeType;import flash.utils.getDefinitionByName;import flash.utils.getQualifiedClassName; import flash.utils.getQualifiedSuperclassName; import mx.utils.NameUtil;import mx.collec
package com.shine.framework.core.util { import flash.utils.describeType; import flash.utils.getDefinitionByName; import flash.utils.getQualifiedClassName; import flash.utils.getQualifiedSuperclassName; import mx.utils.NameUtil; import mx.collections.ArrayCollection; import mx.controls.Alert; public class ReferenceUtil { public function ReferenceUtil() { } /** * 获取class的object package::className * */ public static function referenceClass(className:String):Object{ var ClassReference:Class = getDefinitionByName(className) as Class; var instance:Object = new ClassReference(); return instance; } /** * 获取class的value * */ public static function referenceClassParameters(className:String,parameters:String):*{ return referenceClass(className)[parameters]; } /** * 执行方法 * */ public static function referenceClassFunction(className:String,functionName:String,... rest):*{ var instance:Object =referenceClass(className); return instance[functionName].apply(instance,rest); } /** * 执行方法 * */ public static function referenceObjectFunction(instance:Object,... rest):*{ return instance[functionName].apply(instance,rest); } /** * 获取class name全名 * */ public static function getClassFullName(value:Object):String{ return getQualifiedClassName(value); } /** * 获取class name * */ public static function getClassName(value:Object):String{ if(getQualifiedClassName(value).indexOf("::")!=-1) return getQualifiedClassName(value).substring(getQualifiedClassName(value).indexOf("::")+2); else return getClassFullName(value); } /** * 获取所有的function列表 * ps:只能获取去方法的名称,不可以获取protected and private * */ public static function getAllFunctionFromObject(instance:Object):ArrayCollection{ var functionArrayCollection:ArrayCollection=new ArrayCollection; var method:XMLList=describeType(instance).method; var num:int=method.length(); for(var i:int=0;i<num;i++){ var xml:XML=method[i]; functionArrayCollection.addItem(xml.@name); xml=null; } return functionArrayCollection; } } }??? 估计比较少人用flex的反射,因为它编译模式,让反射感觉不像java的灵活,但是在很多地方,他的反射还是很实用的。至少获取一个object的所有function,再根据function动态调用。希望大家有好的意见一起提出来哦 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |