【问题标题】:Is there anything like an Objective-C block in Java?Java中是否有类似Objective-C块的东西?
【发布时间】:2015-10-07 16:42:29
【问题描述】:

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

例如,在 SpriteKit 应用程序中在一定时间后执行一个块,该应用程序从场景 myScene 调用方法 helloWorld

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

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

  • 将其用作函数参数?
  • 在函数中调用该块?
  • 为块赋值?

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

【问题讨论】:

  • 查看 Java 中的 lambda。
  • 在发布这样的问题之前请search

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


【解决方案1】:

在 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。括号() 是您可以编写任何参数的地方,但Runnable 的方法run 没有任何参数。您也可以将Runnable 传递给方法而不提及Runnable

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多