Flex反射工具类(非常实用)

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,functionName:String,... 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动态调用。希望大家有好的意见一起提出来哦

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值