我通常使用if(object!= null),但它不能正常工作。如何找出一個類是否已實例化
如何驗證類是否實例化。我想擺脫'不能訪問空對象或引用的屬性'。
謝謝!
我的意思是'var object:Object'只是對Object類實例的引用。當我用'object = new Object()'初始化它時,它在構造函數中運行代碼,初始化它。我如何檢查它是否已被初始化。
我通常使用if(object!= null),但它不能正常工作。如何找出一個類是否已實例化
如何驗證類是否實例化。我想擺脫'不能訪問空對象或引用的屬性'。
謝謝!
我的意思是'var object:Object'只是對Object類實例的引用。當我用'object = new Object()'初始化它時,它在構造函數中運行代碼,初始化它。我如何檢查它是否已被初始化。
如果您確實需要知道該類是否已經初始化,那麼我會建議您在類內部使用一個getter,當您完成初始化時返回true值。當然,這隻有在您創建了該類的實例時纔有效。如果我不確定實例是否存在,我首先檢查是否創建實例。我從來沒有遇到任何問題。
if(myObject && myObject.isInitialized)
{
// success
}
,而不是if(myobj!=null)
,你可以做if(myobj)
。
檢查以查看實例或屬性是否爲null
與檢查它是否存在不同。如果myobj
是null
或undefined
而if(myobj!=null)
失誤undefined
(這是實例引用的將是什麼,如果它從來沒有被分配一個值)
if(myobj)
將失敗。
注意:如果該值設置爲false
或0
,則if(myobj)
也將爲false。由於您正在檢查是否擔心空指針異常(因此使用複雜對象),因此可以排除false
和0
之間的可存活值(給出錯誤否定結果),並使用更一般的if語句來檢查實例是否存在存在。
您可能有一種常見的情況,即開始在構造函數中加載一些資源,讓我們假設一個背景圖像。 此代碼將無法正常工作:
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;
}
我希望這有助於。
你能舉一個例子,說明'if(object!= null)`失敗嗎?很難看出你是否能夠判斷它是否具有非空引用。或者你的意思是初始化 - 就像所有的屬性已經設置好了? – 2010-11-25 17:43:17
是的,已初始化。 – Loop 2010-11-25 18:31:38