从字符串创建不同的类

时间:2012-10-14 18:43:57

标签: actionscript-3 flash oop

你好我有这段代码,它必须要做的是当有一些类(总是扩展Box类)必须产生,如果已经有一个相同的类型它加载那个和如果有没有人会创造一个新的。

private var _l:Vector.<Box> = new Vector.<Box>();
public function respawn(shapeId:int, className:String = "Box"):Class {
        var l:int = _l.length, i:int;
        var c:Class;
        var ct:Class = getDefinitionByName(className) as Class;
        for (i = 0; i < l; i++) {
            c = _l[i];
            if (!c.active && c.shapeId == shapeId) {
                return c;
            }
        }
        c = new ct();
        _l[l] = c;

        return c;
    }

如果我尝试使用此代码,则会生成以下错误:

Implicit coercion of a value of type com.shapes:Box to an unrelated type Class.
Implicit coercion of a value of type Class to an unrelated type com.shapes:Box

如何解决这个问题,以便我可以创建不同类型的类,这些类都扩展了Box类并将它们转换为Vector.<Box>

2 个答案:

答案 0 :(得分:1)

Object是所有ActionScript类的超类,而不是Class。

此外,你可以:

var box:Object = new Box();

但你不能:

var box:Box = new Object();

答案 1 :(得分:0)

像Max Golovanchuk所说,我必须瞄准对象,而不是阶级。

public function respawn(shapeId:int, className:Class):Object {
    var l:int = _l.length, i:int;
    var c:Box;
    for (i = 0; i < l; i++) {
        c = _l[i];
        if (c.shapeId == shapeId) {
            return c;
        }
    }
    c = new className();
    _l[l] = c;

    return c;
}