如何从Java8 lambda创建Runnable
问题内容:
尽管有一些阅读,但我遇到了一些我仍难以理解的代码。调用了一个方法,该方法需要两个参数,其中一个是Runnable。尽管有一个lambda,但没有传递Runnable对象。
例如:
公共课程LambdaTest {
私人最终锁锁=新的ReentrantLock();
@测试
公共无效createRunnableFromLambda(){
Locker.runLocked(lock,()-> {
System.out.println(“ hello world”);
});
}
公共静态类储物柜{
公共静态无效runLocked(锁定锁,可运行块){
lock.lock();
尝试{
block.run();
}最后{
lock.unlock();
}
}
}
}
所以我的问题是,你能解释一下如何从lambda创建一个Runnable吗,也请有人解释一下语法 () -> {}。具体来说,()括号是什么意思?
谢谢。
问题答案:
Lambda可以在需要功能接口的任何地方使用。功能接口是具有单个抽象方法的任何接口。
在这种情况下使用的lambda语法为(arguments) -> {blockOfCodeOrExpression}
。在使用单个参数的情况下,可以省略括号,在使用单个命令或表达式的情况下,可以省略花括号。
换句话说,() -> System.out.println("hello world");
就相当于*在这儿,一个Runnable
有望
new Runnable(){
@Override
public void run(){
System.out.println("Hello world one!");
}
};
*(我很确定它不是字节码等效的,但在功能上等效)