2011-01-24 14 views
4

私はコールバックを定義しており、コールバック自体を参照したいと考えています。コンパイラはこれを好まず、コールバックを参照する変数が初期化されていないと主張します。コードは次のとおりです。Javaでは、匿名の内部クラスを内部でどのように参照できますか?

final Runnable callback = new Runnable() { 
    public void run() { 
     if (someCondition()) { 
      doStuffWith(callback); // <<--- compiler says "the local variable callback may not be initialized" 
     } 
    } 
}; 
// Here callback is defined, and is certainly defined later after I actually do something with callback! 

明らかに、コンパイラは、内部メソッドコールバックが定義されていると誤解しています。どのように私はこのコードは良いですか、またはコンパイラをplacateするために別の方法でそれを書くことができますコンパイラに指示するのですか?私は多くのJavaをやっていないので、ここで間違った木を吠えることができます。これを行うための他の慣用的な方法がありますか?それは私にとっては非常に簡単な構成のようです。

編集:もちろん、これは簡単すぎました。すべての迅速な回答ありがとう!

答えて

10

なぜ使用しない:

doStuffWith(this); 
1

あなたがキーワードthisを使用してみましたか?

1

あなたはthis代わりのcallback

(ちょうど私のコンパイラは、あなたのように文句を言うん、それを試してみましたが、あなたはthisを使用している場合、それはdoesntの使用することができます

final Runnable callback = new Runnable() { 
    public void run() { 
     if (something()) { 
      doStuffWith(this); 
     } 
    } 
}; 
関連する問題