Actionscript 3 AS3:将变量强制转换为动态类型

Actionscript 3 AS3:将变量强制转换为动态类型,actionscript-3,flex4,Actionscript 3,Flex4,如果变量类型是类类型的变量,是否可以将变量动态转换为类型 考虑以下情况(无效): 上下文:我正在使用Flex(4)创建一个模态管理器,它将控制创建模态的各个方面(通过PopUpManager),并且我希望尽可能将其最小化。组件将通过相同的函数传递,而不允许强制转换任何类型的变量,例如: var myInstance:* = new myClass(); 我宁愿让它尽可能明确。假设AFAIK这样做没有实际的好处,因为在赋值之前会进行检查以确保参数的类型为Class,这更像是一个POC 欢迎有任何

如果变量类型是
类型的变量,是否可以将变量动态转换为类型

考虑以下情况(无效):

上下文:我正在使用Flex(4)创建一个模态管理器,它将控制创建模态的各个方面(通过
PopUpManager
),并且我希望尽可能将其最小化。组件将通过相同的函数传递,而不允许强制转换任何类型的变量,例如:

var myInstance:* = new myClass();
我宁愿让它尽可能明确。假设AFAIK这样做没有实际的好处,因为在赋值之前会进行检查以确保参数的类型为
Class
,这更像是一个POC

欢迎有任何想法

编辑:我想我可以做到以下几点:

var myClass:Class = MyClass;
var myInstance:* = new myClass() as myClass;
public interface WindowChild {...}

但我不确定这是否是最好的方法。

我认为编译器无法处理动态类型。如果可以,就有可能实现类似于泛型的特性

我认为你能做的最好的事情是:

var myClass:Class = MyClass;
var myObject:* = new myClass();

我不这么认为。当我希望传入多个类型时,我会执行以下操作:

public function doSomethingWithThis(something:Object):void {
    var button:Button = something as Button;
    var image:Image = something as Image;
    var list:List = something as List;


    if (button) {


    }
    else if (image) {


    }
    else if (list) {


    }
    else {
        throw new Error("This type of object will not work with this method.");
    }


}

我不知道这是否与你的问题相同。我需要有一个类,它有一个实现接口的子类。实现类可以是任何类型,但我需要保存并加载它的所有信息

假设我对以下内容有一个简单的了解:

var myClass:Class = MyClass;
var myInstance:* = new myClass() as myClass;
public interface WindowChild {...}

当要保存窗口时,我将所有内容都保存在一个XML blob中。我在Flash播放器中找到一个函数:
flash.utils.getQualifiedClassName(值:*):字符串
文档中说:“返回对象的完全限定类名。”这意味着它返回的
字符串类似于
your.packages::ClassName
。当
窗口
类调用
getQualifiedClassName(child)
时,它会得到类似于
my.packages.structure::MyImplementation的内容
请注意,这不是接口
WindowChild
的路径,而是我创建的实现该接口的类

当再次加载所有这些信息时,我使用了另一个Flash函数
getQualifiedClassName(child)
。这个函数“返回对name参数指定的类的类对象的引用”。我认为这只是一种花哨的说法,它返回一个
对象
,但它的类型将是

当时我需要做的就是:

var childClass:Class = getDefinitionByName(childClassName) as Class; //Child class name is what was returned from getQualifiedClassName(child)
child = new childClass(); // This creates a new Object of what ever type childClass is
这种方法将在运行时保留类型检查,但您始终可以添加另一个中间步骤,以确保从
new childClass()
返回的内容是您想要的

希望这是有用的


干杯

啊,这很方便。。。这可能确实有用。这不完全是我的问题,但最终可能会找到一个地方。非常感谢。