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

塞尔基:

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

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

foo();

或使用外部类实例对其进行调用

OuterClass.this.foo();

此外,如果有人能检查我与此相关的最后一个问题,并向我提供有关错误发生原因的线索,我将不胜感激非常感谢。

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

杰克·沃顿(Jake Wharton):

后者更为明确,如果内部类中存在相同名称的方法,则可以调用外部类方法。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章