我需要帮助理解这个java代码
问题描述:
我下面this Swing指南,我碰到这个代码片段跑:我需要帮助理解这个java代码
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
});
什么的EventQueue.invokeLater
PARAMS里面发生了什么?
答
invokeLater
需要参数类型Runnable
,即实现Runnable
接口的类的实例。在此示例中,此方法接收实现Runnable
的匿名类的实例。
Runnable
只有一个方法 - run
- 所以所有的匿名类实例必须执行的是run
方法。
在Java 8,有一个更短的语法,使用lambda表达式:
EventQueue.invokeLater(
() -> {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
);
+0
哇,这很酷。我会在10分钟内接受我的请求,谢谢。 – 2014-12-06 13:51:51
答
invokeLater()
的参数必须要实现Runnable
,在这种情况下是一个anonymous inner class - 一个没有名称的类并且(在这种情况下)只创建一个对象,明确地指定Runnable
接口的新实现。这主要是用于允许遗留代码中引用方法的Java hack。在新代码中,您可以在大多数情况下使用lambdas和method references。
EventQueue.invokeLater(() -> {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
});
您提出将刚刚从EventQueue
运行run()
的代码时,它的时间这个特殊的代码。
阅读有关匿名课程。 https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html – 2014-12-06 13:48:11
它是Runnable类的匿名实现。 – 2014-12-06 13:49:30
http://stackoverflow.com/questions/22534356/java-awt-eventqueue-invokelater-explained可能是有用的 – Kennet 2014-12-06 13:51:58