/* Vector をランタイムに動的生成。 */ package { import flash.display.Sprite; import flash.text.TextField; import flash.events.Event; import flash.utils.describeType; public class FlashTest extends Sprite { private var _tf:TextField; public function FlashTest() { // write as3 code here.. addEventListener(Event.ADDED_TO_STAGE, initialize); } public function initialize(event:Event):void{ removeEventListener(event.type, arguments.callee); _tf = new TextField(); addChild(_tf); _tf.width = stage.stageWidth; _tf.height = stage.stageHeight; println("Start Application"); var vecSprite:* = VectorUtil.createTypedVector(Sprite, 5, true); vecSprite[0] = new Sprite(); var desc:XML = XML(describeType(vecSprite)); println(desc.@name); //プライベートなクラスはgetDefinitionで得ることができないっぽい。 } private function println(str:String):void{ _tf.appendText(str); _tf.appendText('\n'); } private function print(str:String):void{ _tf.appendText(str); } } } import flash.system.ApplicationDomain; import flash.utils.getQualifiedClassName; class VectorUtil { static public const VECTOR_QNAME:String = getQualifiedClassName(Vector); static public function getVectorDefinition(elementCls:Class, appDomain:ApplicationDomain = null):Class { if (!appDomain) { appDomain = ApplicationDomain.currentDomain; } return appDomain.getDefinition(VECTOR_QNAME + ".<" + getQualifiedClassName(elementCls) + ">") as Class; } static public function createTypedVector(dataType:Class, length:uint = 0, fixed:Boolean = false, domain:ApplicationDomain=null):*{ var def:Class = getVectorDefinition(dataType, domain); return new def(length, fixed); } } 動的にVectorを生成。ただし、プライベートなクラスは不可