as 3の反射アプリケーション、例えば、カスタムクラスのメンバー情報を取得する

1459 ワード

class Test
	public var test1:String = "";
	public var test2:String = "";
	public var test3:String = "";
}

上のTestクラスはテスト用のクラスです
3つの変数があり、反射して取得する可能性があります.
package
{
	import flash.utils.describeType;

	/**
	 *  
	 * @author jave.lin
	 * @date 2013-6-26
	 */	
	public class ReflectionUtil{
		/**
		 *  
		 * <listing version="3.0">
		 * <font size='2'>
		 * e.g.
		 * class Test{
		 *		public var a:String;
		 * 		public var b:String;
		 * }
		 * var result:Vector.<String> = getTypeVarsNameArr(Test);
		 * result ["a", "b"] ;
		 *  ;
		 * </font>
		 * <listing/>
		 * */
		public static function getTypeVarsNameArr(cls:Class):Vector.<String>{
			var result:Vector.<String> = new Vector.<String>();
			var xml:XML = describeType(cls);
			for (var i:int = 0; i < xml.factory.variable.length(); i++){
				var xmlNode:XML = xml.factory.variable[i];
				result.push(xml.factory.variable[i].@name);
			}
			return result;
		}
	}
}

呼び出し:
			var result:Vector.<String> = getTypeVarsNameArr(Test);
			trace(result);

その結果、式のリストに次のように表示されます.
"result"	__AS3__.vec.Vector.<String> (@468c8f9)	
	[0]	"test3"	
	[1]	"test1"	
	[2]	"test2"	
	fixed	false	
	length	3