AS3: вызов метода статического класса - имена классов и методов являются строками - PullRequest
8 голосов
/ 12 января 2010

У меня ужасная проблема. У меня есть две строковые переменные (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.

Как я мог сделать это без этого экземпляра? Если это невозможно, есть ли способ создать экземпляр класса из строковой переменной? Или, если это все еще плохая практика, как бы вы это сделали? (Я должен работать с этими двумя неизвестными строковыми переменными.)

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 12 января 2010

Причина в том, что компилятор удалит ненужные классы - если у вас нет явной ссылки на класс Foo, он не будет присутствовать в вашем конечном приложении.

Вы можете ссылаться в другом месте и по-прежнему заставлять его загружаться - например, статический массив ссылок на классы.

0 голосов
/ 12 января 2010

Это должно сработать, если вы просто добавите трассировку (classClass) - это должно дать вам необходимую ссылку, если я правильно запомнил этот материал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...