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> |