在Java中如何从内部引用匿名内部类?

时间:2011-01-24 19:04:31

标签: java callback runnable anonymous-inner-class

我正在定义一个回调,并希望从内部引用回调。编译器不喜欢这样,并声称引用回调的变量未初始化。这是代码:

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 个答案:

答案 0 :(得分:11)

为什么不使用:

doStuffWith(this);

答案 1 :(得分:3)

我可能错了,但我认为您要将doStuffWith(callback);替换为doStuffWith(this);

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

答案 2 :(得分:1)

您是否尝试过使用关键字this

答案 3 :(得分:1)

您可以使用this代替callback

(刚尝试过,我的编译器确实抱怨你的方式,但如果你使用this它不会:

final Runnable callback = new Runnable() {
    public void run() {
        if (something()) {
            doStuffWith(this);
        }
    }
};