而不是:
var v:Vector.<String> = new Vector.<String>();
有没有办法做这样的事情?
var myType:Class = String;
var v:Vector.<myType> = new Vector.<myType>();
显然这不符合书面形式,但希望你明白这一点。
答案 0 :(得分:4)
简短回答是尝试grapefrukt's answer并查看。
但是,我认为在字节码级别上不可能。问题与如何构造泛型(Vectors)有关。基本上用于创建Vector&lt;&gt;的实例的字节码云:
GenericDefinitionType (Vector) + GenericParameter (int) -> GenericType
Coerce (cast) GenericType as KnownGenericType (eg. "Vector.<int>")
所以问题不在于创建,因为GenericParameter只是一个多重名称(可以是动态的)。问题在于对已知矢量类型的强制(例如,实际上注册为“Vector。&lt; int&gt;”),因为没有已知的矢量类型。
有关令人讨厌的详细信息,请参阅how Vectors work in bytecode上的帖子。
答案 1 :(得分:0)
我发现了一种动态创建向量的方法。不要将类型作为类传递,而是将整个向量作为类传递,如:
public function createVector (vectorType:Object):Object
{
return new vectorType();
}
var v:Vector.<String> = createVector(Vector.<String>);
或者您可以复制这样的矢量:
public function getCopy (ofVector:Object):Object
{
var copy:Object = new ofVector.constructor;
return copy;
}
答案 2 :(得分:-1)
这是未经测试的,但我不明白为什么它不起作用:
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class;
var v:Vector.<ClassReference> = new Vector.<ClassReference>();