2010-11-25 19 views
0

私は通常(object!= null)を使用しますが、うまくいきません。クラスがインスタンス化されているかどうかを調べるには

クラスがインスタンス化されているかどうかを確認する方法を教えてください。私は 'nullオブジェクトまたは参照のプロパティにアクセスできません'を取り除きたい

ありがとうございます!

「var object:Object;」という意味です。 Objectクラスのインスタンスへの参照にすぎません。 'object = new Object()'で初期化すると、コンストラクタでコードが実行され、初期化されます。初期化されているかどうかはどうすれば確認できますか?

+0

'if(object!= null)'が失敗する例を表示できますか? null以外の参照があるかどうかを判断する方法が他にどれほどあるかは分かりません。または、すべてのプロパティが設定されているように、初期化されたことを意味しますか? –

+0

はい、初期化されました。 – Loop

+0

あなたは初期化を構成するものを投稿できますか? – Patrick

答えて

1

クラスが初期化されているかどうかを実際に知る必要がある場合は、初期化を完了したときに真の値を返すクラス内でゲッターを使用することをお勧めします。もちろん、これはクラスのインスタンスを作成した場合にのみ機能します。インスタンスが存在するかどうかわからない場合は、最初にインスタンスが作成されているかどうかを確認します。私はそれに何の問題もなかった。代わりにif(myobj!=null)

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

また、コード最適化のために複数の条件文を呼び出すので、最初に条件付きで少なくともCPUの厳しいチェックを行う必要があります。私はあなたの記事にこのコメントを追加するつもりだったが、提出ボタンがうまくいきませんでした:/ – gthmb

+0

gthmb:コメントをいただきありがとうございます。私はそれを理解するか分からない。私はあなたが計算するためにより多くのCPUを必要とするので、私はデフォルトで複数の条件を使用すべきではないということを推測しています。私はそれを認識しているので、変数が設定されているかどうかわからないときにのみ使用します。 私はWordpressのコメントのバグを調べます。ありがとう。 – Mattias

+0

gthmb:最初にチェックされていないと、次の条件がnullポインタ例外をスローするので、この場合は必ずmyObjectを最初に置いてください。 – Greg

0

、あなただけif(myobj)を行うことができます。

インスタンスまたはプロパティがnullかどうかを確認することは、存在するかどうかを確認することとは異なります。 myobjnull又はundefinedif(myobj!=null)一方ミスundefined(それは値が割り当てされていない場合、インスタンスリファレンスがどうなるかである)である場合

if(myobj) 

は失敗します。

注:値がfalseまたは0に設定されている場合は、if(myobj)も偽になります。ヌルポインタ例外(複雑なオブジェクトを使用していること)を気にしているので、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; 
} 

それとも、このような何かを彼らの完全なロード、ロードされた資産に割り当てられることになるオブジェクト内のいくつかのプロパティを定義することができます。

関連する問題