【问题标题】:call function of outter class from inner anonymous class (same class as outter) [duplicate]从内部匿名类调用外部类的函数(与外部相同的类)[重复]
【发布时间】:2014-07-17 23:43:28
【问题描述】:

如何在不使用辅助变量的情况下调用外部类的回调函数,就像我在下面的示例中所做的那样。

请注意Calling outer class function from inner class 中描述的解决方案可能不起作用。

public abstract class Job {
    public void callback();
}

public abstract class ExtendedJob extends Job {

    protected void handleResult() {
        // workaround for accessing the outter class
        final ExtendedJob outter = this;

        new ExtendedJob {
            public void callback() {
                // can i do the same without the outter variable?
                outter.callback();
            }
        }
    }
}

【问题讨论】:

  • 我不认为你可以没有变量,但它不像使用辅助变量会有害。
  • @DirkyJerky 它有效,看看第一个答案:)
  • 这与此有何不同,除了您有一个额外的扩展意味着它对所有成员都可见? stackoverflow.com/questions/9043170/…
  • 我在想,由于内部类也是一个 ExtendedJob,ExtendedJob.this 将等同于 this。但我猜内部类实际上只是 ExtendedJob 的一个子类。

标签: java inner-classes anonymous-class


【解决方案1】:

我认为这应该可以解决问题

ExtendedJob.this.callback();

【讨论】:

  • 不,语法是倒退的:它是ExtendedJob.this.callback()。
  • @Daniel 谢谢,我刚刚开始 eclipse 来检查哪个版本是正确的;)
  • 我应该自己尝试一下,而不是仅仅认为它不会起作用。我虽然它不会工作,因为内部类也是一个 ExtendedJob 类。我猜它实际上是 ExtendedJob 的子类,匿名,但仍然是子类。
  • @tkSimon 我猜你已经将ExtendedJob.this.foo() 与super.foo() 或类似的东西混淆了。奇怪的是,你只能调用直接超类的方法,而不能调用继承链中任意类的方法。
猜你喜欢
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 2010-09-08
相关资源
最近更新 更多