我通常使用if(object!= null)但它不能正常工作。
如何验证类是否已实例化。我想摆脱'无法访问空对象或引用的属性'。
谢谢!
我的意思是'var object:Object;'只是对Object类实例的引用。当我用'object = new Object()'初始化它时,它在构造函数中运行代码,初始化它。如何检查是否已初始化。
答案 0 :(得分:2)
如果你真的需要知道该类是否已经初始化,那么我建议你在类中使用一个getter,它在你完成初始化后返回一个true值。当然,这仅在您创建了类的实例时才有效。如果我不确定实例是否存在,我首先检查实例是否已创建。我从来没有遇到任何问题。
if(myObject && myObject.isInitialized)
{
// success
}
答案 1 :(得分:0)
而不是if(myobj!=null)
,您可以if(myobj)
。
检查实例或属性是否为null
与检查它是否存在不同。
if(myobj)
如果myobj
为null
或undefined
,则{p>将失败,而if(myobj!=null)
未命中undefined
(如果从未分配过实例引用,那么
注意:如果值设置为if(myobj)
或false
,则0
也将为false。因为你正在检查担心空指针异常(因此使用复杂的对象),你可以排除false
和0
成为可行值(给你一个假阴性)并使用更一般的用于检查实例是否存在的语句。
答案 2 :(得分: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;
}
我希望这会有所帮助。