Dynamically create instance of Vector class
AS3 don’t let us dynamically create an instance of class Vector with elements of various types, the solution is use getDefinitionByName.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package { import flash.system.ApplicationDomain; import flash.utils.getQualifiedClassName; public class ClassUtils { static private const VECTOR_CLASS_NAME : String = getQualifiedClassName( Vector ); static public function getVectorDefinition(itemDefinition : Class, applicationDomain : ApplicationDomain = null) : Class { if(!applicationDomain) applicationDomain = ApplicationDomain.currentDomain; return applicationDomain.getDefinition( VECTOR_CLASS_NAME + '.<' + getQualifiedClassName( itemDefinition ) + '>' ) as Class; } static public function createCustomVector(itemDefinition : Class, length : uint = 0, fixed : Boolean = false, applicationDomain : ApplicationDomain = null) : Vector.<*> { var definition : Class = getVectorDefinition( itemDefinition, applicationDomain ); return new definition( length, fixed ); } } } |
To get definition of Vector class with specified item type:
1 2 3 4 | var itemType:Class = Sprite; var definition:Class = ClassUtils.getVectorDefinition(itemType); trace(definition); // [class Vector.<flash.display::Sprite>] trace(getQualifiedClassName(definition)); // __AS3__.vec::Vector.<flash.display::Sprite> |
To create Vector class instance with specified item type:
1 2 3 | var itemType:Class = Sprite; var vector:Vector.<*> = ClassUtils.createCustomVector(itemType); trace(getQualifiedClassName(vector)); // __AS3__.vec::Vector.<flash.display::Sprite> |


