我需要帮助理解这个java代码

时间:2014-12-06 13:46:28

标签: java class oop anonymous-class anonymous-inner-class

我正在关注this Swing教程,我遇到了这段代码:

    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            SimpleExample ex = new SimpleExample();
            ex.setVisible(true);
        }
    });

EventQueue.invokeLater参数中发生了什么?

2 个答案:

答案 0 :(得分:2)

invokeLater期望类型Runnable的参数,即实现Runnable接口的类的实例。在此示例中,此方法接收实现Runnable的匿名类的实例。

Runnable只有一个方法 - run - 因此所有匿名类实例必须实现的是run方法。

在Java 8中,使用lambda表达式的语法甚至更短:

EventQueue.invokeLater(
    () -> {
        SimpleExample ex = new SimpleExample();
        ex.setVisible(true);
    }
);

答案 1 :(得分:0)

invokeLater()的参数必须是Runnable,在这种情况下是anonymous inner class - 没有名称的类(在这种情况下)只创建了一个对象,明确地是Runnable接口的新实现。这主要是用于允许遗留代码中的引用方法的Java hack。在新代码中,您可以在大多数情况下使用lambdasmethod references,例如

EventQueue.invokeLater( () -> {
        SimpleExample ex = new SimpleExample();
        ex.setVisible(true);
} );

您提供的此特定代码只会在run() EventQueue时运行代码。