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一个值或者接受参数。
我只是在学习 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一个值或者接受参数。