4

コールバックを定義していて、そのコールバックをそれ自体から参照したいと考えています。コンパイラはこれを好まず、コールバックを参照する変数が初期化されていないと主張します。コードは次のとおりです。

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!

内部メソッドのコールバックが定義されるまでにコンパイラが間違っていることは明らかです。このコードが問題ないことをコンパイラに伝えるにはどうすればよいですか、またはコンパイラをなだめるために別の方法で書くにはどうすればよいでしょうか? 私はJavaをあまりやったことがないので、ここで間違ったツリーを吠えている可能性があります. これを行うための他の慣用的な方法はありますか?私にはかなり単純な構造のように思えます。

編集: もちろん、これは簡単すぎました。すべての迅速な回答に感謝します!

4

4 に答える 4

11

使用しない理由:

doStuffWith(this);
于 2011-01-24T19:06:37.573 に答える
3

間違っているかもしれませんが、 に置き換えたいと思いdoStuffWith(callback);ますdoStuffWith(this);

http://download.oracle.com/javase/tutorial/java/javaOO/thiskey.html

于 2011-01-24T19:06:37.747 に答える
1

キーワードを使ってみましたthisか?

于 2011-01-24T19:07:39.103 に答える
1

this代わりに使用できますcallback

(試してみたところ、私のコンパイラはあなたの方法について文句を言いますが、それを使用しても問題はありませんthis

final Runnable callback = new Runnable() {
    public void run() {
        if (something()) {
            doStuffWith(this);
        }
    }
};
于 2011-01-24T19:08:13.427 に答える