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

时间:2015-10-07 16:42:30

标签: java objective-c objective-c-blocks

我刚刚学习Java,之前我在Objective-C中开发了应用程序。我喜欢“块”的概念,因为它们允许在发生某些事情后运行代码。

例如,要在SpriteKit应用中执行一段时间后调用场景helloWorld中的方法myScene

[myScene runAction:[SKAction sequence:@[[SKAction waitForDuration:5], [SKAction runBlock:^{
    [myScene helloWorld];
}]]]];

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

  • 将它用作函数参数?
  • 在函数中调用所述块?
  • 为块分配值?

我听过一些关于“闭包”的内容,但我不太确定它们是什么或者如何使用它们。

1 个答案:

答案 0 :(得分:4)

在Java中,执行此操作的方法是使用接口。最基本的界面是Runnable,其方法为run

  

语法是什么......

     

将它用作函数参数?

void foo(Runnable r)
  

在函数中调用所述块?

r.run();
  

为块分配值?

在Java 8之前你必须做这样的事情:

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

现在你可以这样做:

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

涉及->的表达式称为lambda。您可以在其中编写任何参数,但是()的方法run没有任何参数。您也可以在不提及Runnable的情况下将Runnable传递给方法:

Runnable

Java 8引入了许多新接口,其中方法可以返回值或接受参数。