Java匿名内部类调用静态方法

标签 java eclipse anonymous-inner-class

我在 Eclipse 应用程序中有以下代码:

import org.eclipse.swt.widgets.Listener;
public class X {
  public void test() {
     Listener eclipseListener = new Listener() {
        public void handleEvent(Event evt) {
            System.err.println("starting");
            Y.externalMethod();
            System.err.println("finished");
        }
    }
}

public class Y {
    public static void externalMethod() {
        System.err.println("in class Y");
    }
}

当我在类 X 中运行方法测试时,我得到以下输出:

starting

我不明白为什么 externalMethod 没有在 Y 类中运行,以及为什么控制没有返回到 X 类(它从不打印“完成”或“在 Y 类中”)。

关于为什么 externalMethod 不运行有什么想法吗?匿名内部类是否不允许在其类之外调用静态方法?如果是这样,为什么这段代码可以编译?

最佳答案

而不是

    public void handleEvent(Event evt) {
        System.err.println("starting");
        Y.externalMethod();
        System.err.println("finished");
    }

你可能会有更好的运气:

    public void handleEvent(Event evt) {
        System.err.println("starting handleEvent");
        try {
            Y.externalMethod();
        } finally {
            System.err.println("finished handleEvent");
        }
    }

也就是说,

  1. 将方法退出跟踪放在finally
  2. 将方法名称添加到跟踪行

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

相关文章:

java - 为什么要将内部类外部字段的修饰符改为final?

java - SpringBoot重试,剩余重试次数

java - jsf 和 eclipse 设置。资源管理器中的库与 tomcat 中的库不同。怎么会?

java - 我什么时候需要回收?

java.lang.NoClassDefFoundError & 转换为 dalvik 格式失败,错误 1 ​​未知问题

java - 匿名函数内的回调,未正确获取语法

java - 如何在匿名内部类中使用外部方法的输入?

java - Solr 查询只返回 Id 的

java - eclipse日志中具体数字的含义是什么?

java - 从 eclipse Sirius 生成源代码