AS3:转换为矢量



我正在尝试从未知类创建一个向量,但它失败了,关于如何做到这一点的任何想法?

这是我尝试过的:

var vector:Vector = new Vector(); // throw exception
function base():void{
var vector:Vector.<String> = createVector(String);// throw classCastException
}
function createVector(cls:Class):*{
     var array:Array = new Array();
     for(var i:int = 0; i < 10; i++){
         var element:cls = new cls();
          array.push(element);
     }
     return Vector(array);
}
Vector

需要一个参数类型,所以你不能随心所欲地执行此操作,但是使用 getQualifiedClassName 来获取类信息,你可以构造一个字符串,使你能够调用 Vector。 构造函数使用 getDefinitionByName :

前任。

// get class parameter name
var className:String=getQualifiedClassName(String);
// get the Vector class object for the given class
var o:Object=getDefinitionByName("__AS3__.vec::Vector<"+className+">");
// call the constructor
var v:*=o.prototype.constructor(["hello", "world"]);

所以你的函数可以写成:

    public function createVector(cls:Class):*{
        var cn:String = getQualifiedClassName(cls);
        var o:Object = getDefinitionByName("__AS3__.vec::Vector.<"+cn+">");
        var array:Array = [];
        for(var i:int = 0; i < 10; i++){
            var element:* = new cls();
            array.push(element);
        }
        return o.prototype.constructor(array);
    }

WonderFL的现场示例:http://wonderfl.net/c/pkjs

根据@Patrick答案,我找到了一个可行的解决方案。

看看吧:

function createVector(cls:Class):*{
        var className:String = getQualifiedClassName(cls);
        var vectorClass:Class = getDefinitionByName("__AS3__.vec::Vector.<"+className+">") as Class;
        var vector:* = new vectorClass(10);        
        for(var i:int = 0; i < 10; i++){
            var element:MyClass = new cls(); // may be Object or Object extends cls
            vector[i] = element;
        }
        return vector;
    }

最新更新