我有一个丑陋的问题.我有两个字符串变量(className和staticMethod)存储类的名称,它是我必须调用的静态方法:
package { import flash.display.Sprite; import flash.utils.getDefinitionByName; import flash.utils.getQualifiedClassName; public class ClassPlay extends Sprite { public function ClassPlay() { new Foo(); var className:String = 'Foo'; var staticMethod:String = 'bar'; var classClass:Class = getDefinitionByName(className) as Class; try { classClass[staticMethod](); } catch (e:Error) {} } } }
这是主题类:
package { public class Foo { public static function bar():void {trace('Foo.bar() was called.');} } }
它完美地运作.当你注释掉这个(第9行)时的问题:
// new Foo();
如果没有这一行,它将以异常退出:
ReferenceError: Error #1065: Variable Foo is not defined.
没有那个实例,我怎么能这样做呢?如果这是不可能的,有没有办法从字符串变量实例化类?或者,如果这仍然是一个不好的做法,你会怎么做?(我必须使用那两个未知的字符串变量.)
提前致谢.
原因是编译器将删除不必要的类 - 如果您没有在Foo
某个地方明确引用该类,它将不会出现在您的最终应用程序中.
您可以在其他地方引用它并仍然强制它被加载 - 例如,对类的引用的静态数组.