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 回答