加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Study Flex《Flex反射工具类》

发布时间:2020-12-15 03:45:47 所属栏目:百科 来源:网络整理
导读: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;
		}
	}
}

1、估计比较少人用flex的反射,因为它编译模式,让反射感觉不像java的灵活,但是在很多地方,他的反射还是很实用的。至少获取一个object的所有function,再根据function动态调用。希望大家有好的意见一起提出来哦。

2、但是在实际的编码过程中,flex的反射机制并不像java那么强大,有时候反射会出现一些问题,例如在某些类,木有被编译进swf,则会出现找不到类的错误信息。

注:本文转载:

http://blog.csdn.net/arjick/article/details/6278116

http://cwfmaker.iteye.com/blog/477089

-----------------------------------------------------------------------------------

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读