Java 中是否有类似 Objective-C 的块?

Is there anything like an Objective-C block in Java?

我只是在学习 Java,我之前在 Objective-C 开发过应用程序。我喜欢 "blocks" 的概念,因为它们允许代码在某些事情发生后成为 运行。

例如,在从场景 myScene:

调用方法 helloWorld 的 SpriteKit 应用程序中,在一定时间后执行一个块
[myScene runAction:[SKAction sequence:@[[SKAction waitForDuration:5], [SKAction runBlock:^{
    [myScene helloWorld];
}]]]];

在Java中有类似方块的东西吗?如果是这样,我将如何使用它?语法是什么...

我听说过一些关于 "closures," 的信息,但我不太确定它们是什么或如何使用它们。

在Java中,做到这一点的方法是使用接口。最基本的接口是 Runnable,它有一个方法 run.

What's the syntax to...

use it as a function parameter?

void foo(Runnable r)

call said block in the function?

r.run();

assign a value to the block?

在 Java 8 之前,您必须执行以下操作:

Runnable r = new Runnable() {
    @Override
    public void run() {
        // do something
    }
}

现在你只需要做:

Runnable r = () -> { // do something }

涉及 -> 的表达式称为 lambda。小括号 () 是您可以写入任何参数的地方,但是 Runnable 的方法 run 没有任何参数。您还可以将 Runnable 传递给方法而不提及 Runnable:

foo(() -> { // do something });

Java 8引入了很多很多新的接口,其中的方法可以return一个值或者接受参数。