我在 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 中运行方法测试时,我得到以下输出:
block 引用>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");
}
}
也就是说,
- 将方法退出跟踪放在
finally
- 将方法名称添加到跟踪行
关于Java匿名内部类调用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696903/