我遇到了一些代码,尽管有点阅读,但我仍然难以理解。调用一个方法,该方法接收两个args,其中一个是Runnable。而不是传入一个Runnable对象虽然有一个lambda。
例如:
public class LambdaTest { private final Lock lock = new ReentrantLock(); @Test public void createRunnableFromLambda() { Locker.runLocked(lock, () -> { System.out.println("hello world"); }); } public static class Locker { public static void runLocked(Lock lock, Runnable block) { lock.lock(); try { block.run(); } finally { lock.unlock(); } } } }
所以我的问题是,你能解释一下如何从lambda创建Runnable,还请有人解释语法() - > {}。具体来说,()括号是什么意思?
感谢。
答案 0 :(得分:36)
Lambda可以在任何需要功能接口的地方使用。 功能接口是具有单个抽象方法的任何接口。
本例中使用的lambda语法是(arguments) -> {blockOfCodeOrExpression}
。在单个参数的情况下,可以省略括号,并且在单个命令或表达式的情况下可以省略括号。
换句话说,() -> System.out.println("hello world");
等同于
new Runnable(){
@Override
public void run(){
System.out.println("Hello world one!");
}
};
(我很确定它不是字节码等价的,但在功能方面是等效的)