java - Java 中有类似 Objective-C block 的东西吗?

标签 java objective-c objective-c-blocks

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

例如,要在 SpriteKit 应用程序中调用场景 myScene 方法 helloWorld 中的特定时间后执行 block :

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

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

  • 将其用作函数参数?
  • 在函数中调用所述 block ?
  • 给 block 赋值?

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

最佳答案

在Java中,实现这一点的方法是使用接口(interface)。最基本的接口(interface)是 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 引入了很多很多新接口(interface),其中的方法可以返回值或接受参数。

关于java - Java 中有类似 Objective-C block 的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32997887/

相关文章:

ios - 使用 Core Data + RestKit 0.2.x 自动删除并重新创建持久数据存储

iphone - 如何处理 MKMapView 上数百个 map 注释导致的延迟?

objective-c - IOS:使用 UIAlert 的 cancelButtonTitel 删除 subview

c - 为什么 LLVM 不使用 Xcode 编译 pch 文件中类型定义的 C block ?

java - Selenium Cucumber 框架,chrome 未启动

java - 检索用户帐户

java - CascadeType.ALL 不更新子元素

java - 如何将Java时间戳转换为mySQL日期时间函数

objective-c - 为委托(delegate)提供 'strong' 引用是否可行?

ios - 多次调用 block 显示 View 中的 UIAlertView