将代码作为函数参数传递

OnT*_*Fly 1 java swing

我正在阅读一本教科书,我想知道我们传递给函数的参数如何既不是原语,也不是用户定义的类实例.

SwingUtilities.invokeLater(new Runnable() 
{
    public void run() {
        new ButtonDemo();
    }
});
Run Code Online (Sandbox Code Playgroud)

我了解到这是其中之一.但它似乎在这里传递了一个用户定义的构造函数方法,例如Runnable().看来他们想在以后运行该线程,但什么时候?这是否合法,我认为是,但我从来没有在我的Java类中听说过这样的事情.

JB *_*zet 6

这实际上是传递一个实现Runnable接口的匿名内部类的实例.在Java教程中阅读它们.


das*_*ght 5

我想知道我们传递给函数的参数如何既不是原始的,也不是用户定义的类实例.

它是用户定义的类的实例.唯一的区别是这个类没有名字*.

但它是一个类的真实实例 - 它可以完成命名类可以执行的大多数操作.除此之外,它还可以提供其基类或接口的方法的实现,这是用于将"一段可执行代码"传递给方法的方法.

*至少,不是用户可见的:Java编译器确实为每个匿名类分配一个内部名称,该名称通常包含一个美元符号.