是否可以动态地将变量转换为类型,其中类型将是类型的变量Class
?
考虑以下因素(无效):
var myClass:Class = MyClass;
var myInstance:myClass = new myClass();
对于上下文:我正在 Flex (4) 中创建一个模态管理器,它将控制创建模态的各个方面(通过PopUpManager
)并且我想尽可能减少它。组件将通过相同的函数传递,而不是允许转换任何类型的变量,例如:
var myInstance:* = new myClass();
我宁愿让它尽可能明确。当然,这样做并没有真正的优势,因为需要进行检查以确保参数的类型Class
在分配之前——它更像是一个 POC。
欢迎任何想法。
编辑:我想我可以执行以下操作:
var myClass:Class = MyClass;
var myInstance:* = new myClass() as myClass;
但我不确定这是否是最好的方法。
我不知道这是否与您遇到的问题相同。我需要一个类,该类有一个实现接口的子类。实现类可以是任何类型,但我需要保存和加载它的所有信息。
假设我有以下内容:
public interface WindowChild {...}
and
public class Window {
public var child:WindowChild;
}
当需要保存窗口时,我将所有内容保存在 XML blob 中。我发现Flash播放器中有一个功能:
flash.utils.getQualifiedClassName(value:*):String
文档说:“返回对象的完全限定类名。”这意味着String
它返回会是这样的your.packages::ClassName
。当。。。的时候Window
班级打电话getQualifiedClassName(child)
它得到类似的东西my.packages.structure::MyImplementation
.
请注意,这不是接口的路径WindowChild
而是我创建的实现该接口的类。
当需要再次加载所有这些信息时,我使用了另一个 Flash 函数getQualifiedClassName(child)
。该函数“返回对名称参数指定的类的类对象的引用”。我认为这只是一种奇特的说法,它返回一个Object
但它会是类型Class
.
那时我需要做的就是:
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()
就是你想要的。
希望这有用。
Cheers
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)