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

时间:2013-02-04 22:27:20

标签: 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类中运行方法测试时,我得到以下输出:

  
    

起始

  

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

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

2 个答案:

答案 0 :(得分:1)

而不是

    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. 将方法名称添加到跟踪线

答案 1 :(得分:0)

此处未调用方法handleEvent()。你所做的是定义匿名类并动态创建一个实例。

您需要将此侦听器(eclipseListener)注册到某个事件处理程序,该事件处理程序将在事件触发时调用方法handleEvent()