Какие значения безопасно использовать для инициализации статических и постоянных членов определения класса?

#actionscript-3

#actionscript-3

Вопрос:

Сформулированный по-другому, этот вопрос мог бы звучать так: «Каков порядок объявлений и определений переменных во время компиляции?»

На данный момент я не могу вспомнить конкретные примеры, но я знаю, что столкнулся с проблемами при инициализации значений const и static в моих определениях классов из-за того, что объявление этих значений происходит не по порядку.

Я знаю, что могу создавать экземпляры объектов при объявлении статических постоянных членов, например:

 public class ConstsWithNewObjects {
    public static const DEFINED_NOW_2:Object = {something:"Defined!"};
    public static const DEFINED_NOW_3:Object = new CustomObject("Defined!");
}
  

Но, если я обращаюсь к одному из этих членов из другого статического или постоянного значения, я представляю, что возникают условия гонки, например:

 public class ConstsWithOtherConsts {
    public static const DEFINED_NOW_1:Object = DEFINED_NOW_3; // Does this exist, yet?
}
  

Ответ №1:

Герой ActoinScript Джек Данстан очень подробно осветил эту тему в своем блоге: Загрузка класса, часть 2.

Независимо от выводов Джека; Я бы рекомендовал, для здравомыслия ваших читателей; чтобы ваш код статического инициализатора был максимально чистым и простым — не забывайте, что статические поля могут вызывать статические методы; вы также можете использовать метод инициализатора статического класса.