Как узнать, был ли создан экземпляр класса - PullRequest
0 голосов
/ 25 ноября 2010

Я обычно использую if (object! = Null), но он не работает хорошо.

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

Спасибо!

Я имею в виду, 'var object: Object;'это просто ссылка на экземпляр класса Object.Когда я инициализирую его с помощью object = new Object (), он запускает код в конструкторе, инициализируя его.Как я могу проверить, была ли она инициализирована или нет.

Ответы [ 3 ]

2 голосов
/ 25 ноября 2010

Если вам действительно нужно знать, был ли класс инициализирован, то я бы порекомендовал вам использовать метод get внутри класса, который возвращает истинное значение, когда вы завершили инициализацию.Конечно, это работает, только если вы создали экземпляр класса.Если я не уверен, существует ли экземпляр, я сначала проверяю, создан ли экземпляр.У меня никогда не было проблем с этим.

if(myObject && myObject.isInitialized)
{
    // success
}
0 голосов
/ 26 ноября 2010

У вас может быть общая ситуация, когда вы начинаете загружать некоторые активы в конструкторе, давайте предположим, что фоновое изображение. Этот код не будет работать должным образом:

var object:TestObject = new TestObject(); //inside the contructor, the background image will start loading
object.background.width = 120; // this will not work, because the background is not loaded yet

Есть много способов решить эту проблему ...

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

Или вы можете определить некоторые свойства внутри объекта, которые будут назначены загруженным ресурсам, когда они завершат загрузку, примерно так:

//outside
object.BackgroundWidth = 120;

----------

//inside the class
public var BackgroundWidth:int;
private var background:Bitmap;

public function TestObject(){
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, assignProperties);
    loader.load("img.png");
}
//this will make sure the width is applied to the background 
//when it's loaded completely
private function assignProperties(e:Event){
    background = Bitmap((event.currentTarget as LoaderInfo).content);
    background.width = BackgroundWidth; 
}

Надеюсь, это помогло.

0 голосов
/ 26 ноября 2010

вместо if(myobj!=null), вы можете просто сделать if(myobj).

проверка, чтобы увидеть, если экземпляр или свойство null отличается от проверки, если он существует.

if(myobj)

потерпит неудачу, если myobj равно null или undefined, тогда как if(myobj!=null) пропустит undefined (это то, чем будет ссылка на экземпляр, если ей никогда не назначалось значение).

примечание: if(myobj) также будет ложным, если значение установлено на false или 0. Поскольку вы проверяете, беспокоитесь об исключении нулевого указателя (поэтому используете сложный объект), вы можете исключить false и 0 из допустимых значений (давая вам ложный отрицательный результат) и использовать более общий оператор if для проверки или нет экземпляр существует.

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