Приведение с использованием ключевого слова as
возвращает null
в случае сбоя. В этом случае первый элемент в коллекции массивов может не быть объектом типа Bar
, как вы ожидаете; это может быть Foo
или что-то еще. Вы можете привести объект подкласса к базовому классу, но не иначе.
Используйте синтаксис в скобках для приведения - он выдаст исключение в случае сбоя приведения и, таким образом, вы сможете определить тип arr.getItemAt(0)
.
//Change
var tempBar:Bar = arr.getItemAt(0) as Bar;
//to
var tempBar:Bar = Bar(arr.getItemAt(0));
, чтобы убедиться, что первый элемент в коллекции массивов действительно является экземпляром Bar
(а не Foo
или чем-то еще).
В противном случае вы можете найти тип, используя
trace(flash.utils.getQualifiedClassName(arr.getItemAt(0)));
if(tempBar != null) {
tempBar.someProp++;
f = tempBar;
// f is now null
}
Кстати, я считаю, что опубликованный код не является точным кодом, который вы запустили, потому что для f
должно быть null
, tempBar
должно быть null
, так как вы назначаете его для f
. В этом случае код внутри if
не должен выполняться, поскольку вы проверяете наличие null
внутри if
. Даже если он входит в блок if
, он выдаст ошибку нулевого указателя (# 1009) в первой строке, где вы пытаетесь увеличить tempBar.someProp