Мне нужно запустить код в объявлении класса до его экземпляра. Это было бы особенно полезно для автоматической регистрации классов на фабрике. См:
// Main.as
public class Main extends Sprite
{
public function Main() : void
{
var o : Object = Factory.make(42);
}
}
// Factory.as
public class Factory
{
private static var _factory : Array = new Array();
public static function registerClass(id : uint, c : Class) : void
{
_factory[id] = function () : Object { return new c(); };
}
public static function make(id : uint) : Object
{
return _factory[id]();
}
}
// Foo.as
public class Foo
{
// Run this code before instanciating Foo!
Factory.registerClass(CLASS_ID, Foo);
public static const CLASS_ID : uint = 42;
}
AFAIK, машина JIT для языка ActionScript не позволит мне сделать это, поскольку в методе Main
не делается никаких ссылок на Foo
. При создании класса Foo
я не могу (и не хочу) регистрировать классы в Main
: я хочу зарегистрировать все экспортированные классы в определенном пакете (или библиотеке). В идеале это можно сделать с помощью самоанализа пакета, которого нет в ActionScript 3.
Знаете ли вы какое-либо решение (или другое решение) моей проблемы с дизайном?