【问题标题】:In Java how can I reference an anonymous inner class from within itself?在 Java 中,如何从内部引用匿名内部类?
【发布时间】:2023-11-05 19:09:01
【问题描述】:

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

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,所以我可能在这里叫错了树。有没有其他惯用的方法来做到这一点?对我来说,这似乎是一个非常简单的结构。

edit:当然,这,那太容易了。感谢所有快速回答!

【问题讨论】:

    标签: java callback runnable anonymous-inner-class


    【解决方案1】:

    为什么不使用:

    doStuffWith(this);
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          您可以使用this 代替callback

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

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

          【讨论】: