Java:在匿名内部类中调用外部类方法

标签 java android inner-classes

最近,我在一个android项目中遇到了一个神秘的问题,我描述了here .我以某种方式解决了这个问题,但仍然不知道其背后的确切原因。

假设我想在内部类中调用函数 foo()。问题是,像这样直接调用有什么区别

foo();

或者用外部类实例调用它

OuterClass.this.foo();

此外,如果有人可以查看我的上一个 question,我将不胜感激与此相关,并给我一个关于错误发生原因的线索。非常感谢。

PS:我在某处读到非静态内部类将始终保存外部类的实例。因此,如果我只使用 foo(),它将使用该实例调用外部函数?

最佳答案

后者更明确,如果内部类中存在同名方法,则允许您调用外部类方法。

class OuterClass {
    void foo() { System.out.println("Outer foo"); }

    View.OnClickListener mListener1 = new View.OnClickListener() {
        void foo() { System.out.println("Inner foo"); }

        @Override public void onClick(View view) {
            foo(); //Calls inner foo
            OuterClass.this.foo(); //Calls outer foo
        }
    }

    View.OnClickListener mListener2 = new View.OnClickListener() {
        @Override public void onClick(View view) {
            foo(); //Calls outer foo
            OuterClass.this.foo(); //Calls outer foo
        }
    }
}

关于Java:在匿名内部类中调用外部类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9043170/

相关文章:

java - Android Studio - 添加 Google Play 服务/Android 支持后出现错误

scala - 奇怪的 "match may not be exhaustive"警告

java - 静态嵌套类可以通过非静态扩展

swift - 带有嵌套类的 Swift 4 上的 "instance member cannot be used on type"错误

java - Apache Flink CEP如何根据事件值传入时间窗口?

java - 在 Java 8/jsr310 中格式化持续时间

javascript - Jersey Rest 服务仅返回 404

java - android中如何设置进度条颜色?

android - 有没有办法在 flutter 中为 DropdownButton 添加标签?

Android Google Firebase 数据库对象值