我有一个丑陋的问题。我有两个字符串变量(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.
如果没有实例化,我怎么能这样做?如果这是不可能的,有没有办法从字符串变量实例化类?或者,如果这仍然是一个不好的做法,你会怎么做? (我必须使用那两个未知的字符串变量。)
提前致谢。
答案 0 :(得分:8)
原因是编译器会删除不必要的类 - 如果你没有在某个地方明确引用类Foo
,它将不会出现在你的最终应用程序中。
你可以在其他地方引用它并仍然强制它被加载 - 例如,对类的引用的静态数组。
答案 1 :(得分:0)
如果你只是引入一个跟踪(classClass)它应该可以工作 - 如果我能正确记住这些内容,它应该为你提供所需的引用。