当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能在同名的匿名类之外调用方法

如何解决《为什么我不能在同名的匿名类之外调用方法》经验,为你挑选了1个好方法。



1> Alex B..:

您的代码示例行为的解释this是定义为您当前"最"的类.在这种情况下,你是匿名内部类中的"最"的子类runnable并且没有匹配的方法run(int).要扩大搜索范围,this请通过说明指定要使用的搜索NotApplicable.this.run(42).

jvm将评估如下:

this- >当前正在执行Runnablewith method的实例run()

NotApplicable.this- >当前正在执行NotApplicablewith method的实例run(int)

编译器将查找嵌套树以查找与方法的NAME匹配的第一个方法. - 感谢DJClayworth的澄清

匿名内部类不是外部类的子类.由于这种关系,内部类和外部类应该能够具有完全相同签名的方法,并且最内部代码块应该能够识别它想要运行的方法.

public class Outer{

    public Outer() {
        new Runnable() {
            public void printit() {
                System.out.println( "Anonymous Inner" );
            }
            public void run() {
                printit(); // prints "Anonymous Inner"
                this.printit(); //prints "Anonymous Inner"

                // would not be possible to execute next line without this behavior
                Outer.this.printit(); //prints "Outer" 
            }
        };
    }

    public void printit() {
        System.out.println( "Outer" );
    }
}


这个答案是正确的,除了关于"即使两个方法都没有命名为'run'"也会展示这种行为.编译器将查找嵌套树以查找与方法的NAME匹配的第一个方法.
推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有