2010-11-25 43 views
0

我通常使用if(object!= null),但它不能正常工作。如何找出一个类是否已实例化

如何验证类是否实例化。我想摆脱'不能访问空对象或引用的属性'。

谢谢!

我的意思是'var object:Object'只是对Object类实例的引用。当我用'object = new Object()'初始化它时,它在构造函数中运行代码,初始化它。我如何检查它是否已被初始化。

+0

你能举一个例子,说明'if(object!= null)`失败吗?很难看出你是否能够判断它是否具有非空引用。或者你的意思是初始化 - 就像所有的属性已经设置好了? – 2010-11-25 17:43:17

+0

是的,已初始化。 – Loop 2010-11-25 18:31:38

回答

1

如果您确实需要知道该类是否已经初始化,那么我会建议您在类内部使用一个getter,当您完成初始化时返回true值。当然,这只有在您创建了该类的实例时才有效。如果我不确定实例是否存在,我首先检查是否创建实例。我从来没有遇到任何问题。

if(myObject && myObject.isInitialized) 
{ 
    // success 
} 
0

,而不是if(myobj!=null),你可以做if(myobj)

检查以查看实例或属性是否为null与检查它是否存在不同。如果myobjnullundefinedif(myobj!=null)失误undefined(这是实例引用的将是什么,如果它从来没有被分配一个值)

if(myobj) 

将失败。

注意:如果该值设置为false0,则if(myobj)也将为false。由于您正在检查是否担心空指针异常(因此使用复杂对象),因此可以排除false0之间的可存活值(给出错误否定结果),并使用更一般的if语句来检查实例是否存在存在。

0

您可能有一种常见的情况,即开始在构造函数中加载一些资源,让我们假设一个背景图像。 此代码将无法正常工作:

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; 
} 

我希望这有助于。

相关问题