Вот тема, которая была рассмотрена во многих местах, но с одним оставшимся вопросом к ней.
При использовании отражения (descriptionType) для перечисления аргументов конструктора класса, как вы, возможно, знаете, существует ошибкав Flash Player <10.1, что приводит к нетипизированию аргументов конструктора (type = "*") в некоторых случаях.Широко распространенное решение этой проблемы состоит в том, чтобы предварительно создать экземпляр рассматриваемого класса с правильным количеством нулевых значений, переданных в качестве аргументов, и затем снова вызвать descriptionType для класса. </p>
Теперь вот проблема: идеальный результат предварительного-приведение в заблуждение является ошибкой, предпочтительно до того, как класс успел сделать какую-либо сантехнику.Примерно так:
public function SomeClass(model:Model) {
_model = model; // OK
_model.addEventListener(Event.CHANGE, _onChange); // Throws error, great!
}
В этом случае у нас остается не функционирующий экземпляр SomeClass, который может быть обнулен, и все будут счастливы.Но что произойдет, если конструктор успеет связать себя с чем-то за пределами класса:
public function SomeClass(model:Model) {
_someOtherClass = new SomeOtherClass();
_someOtherClass.addEventListener(Event.CHANGE, _onOtherChange); // Uh-oh..
_model = model;
_model.addEventListener(Event.CHANGE, _onChange); // Throws error too late!
}
Что произойдет, если у вас останется случайный экземпляр, который может вызвать непредвиденное поведение и / или утечки памяти.
Вы можете обойти эту проблему, переставив строки в конструкторе, чтобы убедиться, что он выдаст ошибку и своевременно прервет работу.Но это не устойчивый вариант для фреймворка.
Есть идеи?