可以使用类型引用声明AS3向量吗?

时间:2009-06-05 08:49:19

标签: actionscript-3 generics vector

而不是:

var v:Vector.<String> = new Vector.<String>();

有没有办法做这样的事情?

var myType:Class = String;
var v:Vector.<myType> = new Vector.<myType>();

显然这不符合书面形式,但希望你明白这一点。

3 个答案:

答案 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>();