Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 可以用类型引用声明AS3向量吗?_Actionscript 3_Generics_Vector - Fatal编程技术网

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

Actionscript 3 可以用类型引用声明AS3向量吗?,actionscript-3,generics,vector,Actionscript 3,Generics,Vector,与此相反: var v:Vector.<String> = new Vector.<String>(); var v:Vector.=新向量(); 有没有办法做这样的事 var myType:Class = String; var v:Vector.<myType> = new Vector.<myType>(); var myType:Class=String; 变量v:向量新向量(); 显然,这不符合书面要求,但希望您能理解。这是未经测

与此相反:

var v:Vector.<String> = new Vector.<String>();
var v:Vector.=新向量();
有没有办法做这样的事

var myType:Class = String;
var v:Vector.<myType> = new Vector.<myType>();
var myType:Class=String;
变量v:向量新向量();

显然,这不符合书面要求,但希望您能理解。

这是未经测试的,但我不明白为什么它不起作用:

import flash.display.Sprite;
import flash.utils.getDefinitionByName;

var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class;
var v:Vector.<ClassReference> = new Vector.<ClassReference>();
导入flash.display.Sprite;
导入flash.utils.getDefinitionByName;
var ClassReference:Class=getDefinitionByName(“flash.display.Sprite”)作为类;
变量v:向量新向量();
简短的回答是“试试看”

然而,我认为在字节码级别上是不可能的。这个问题与泛型(向量)是如何构造的有关。基本上,创建Vector实例的字节码如下:

GenericDefinitionType(Vector)+GenericParameter(int)->GenericType
强制(强制)将GenericType转换为KnownGenericType(例如“Vector”)
因此,问题不在创建中,因为GenericParameter只是一个多名称(可以是动态的)。问题在于强制使用已知的向量类型(例如,实际上注册为“vector”),因为没有已知的向量类型


有关极客的详细信息,请参阅我在上的帖子。

我找到了一种动态创建向量的方法。不是将类型作为类传递,而是将整个向量作为类传递,如:

public function createVector (vectorType:Object):Object
{
    return new vectorType();
}

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

嗯?这与我问题中的非工作示例代码的作用完全相同,只是使用了Sprite而不是String。啊,我明白你的意思了。谢谢
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;
}