繁体   English   中英

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

[英]Java: calling outer class method in anonymous inner class

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

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

foo();

或使用外部类实例调用它

OuterClass.this.foo();

此外,如果有人可以检查我与此相关的最后一个问题,我将不胜感激,并给我一个关于为什么会发生错误的线索。 非常感谢。

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
        }
    }
}

当您声明匿名类时,内部范围会完全改变,虽然看起来您正在调用同一个对象,但引用在这里得到了更改,因此在处理匿名内部类/方法时,最好像稍后那样显式调用外部类实体

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM