【问题标题】:AS3: call a static class method - class and method names are stringsAS3:调用静态类方法 - 类和方法名是字符串
【发布时间】:2010-01-11 22:55:58
【问题描述】:

我有一个丑陋的问题。我有两个字符串变量(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.

如果没有实例化,我怎么能做到这一点?如果这是不可能的,有没有办法从字符串变量实例化类?或者,如果这仍然是一个不好的做法,你会怎么做? (我必须使用这两个未知的字符串变量。)

提前致谢。

【问题讨论】:

    标签: apache-flex flash actionscript-3


    【解决方案1】:

    原因是编译器会去掉不必要的类——如果你没有在某处明确引用类Foo,它就不会出现在你的最终应用程序中。

    您可以在其他地方引用并仍然强制加载它 - 例如,对类的引用的静态数组。

    【讨论】:

    【解决方案2】:

    如果你只输入一个 trace(classClass) 它应该可以工作 - 如果我没记错的话,它应该会给你你需要的参考。

    【讨论】:

    • 我认为你甚至不需要走那么远。我相信如果你只是将类名放在你的代码中(而不是在 import 语句中),它就会被包含在内。编译器非常愚蠢。例如:雪碧;我的班级;
    • 不,它不起作用。 classClass 初始化时抛出错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2012-05-24
    • 2017-10-10
    • 2013-02-27
    • 1970-01-01
    • 2012-03-11
    • 2017-09-14
    相关资源
    最近更新 更多